如何从单个表中选择多个列值相同的行
Posted
技术标签:
【中文标题】如何从单个表中选择多个列值相同的行【英文标题】:How to select multiple columns values same rows from single table 【发布时间】:2011-12-28 22:02:21 【问题描述】:我有一个 SQL Server 表。现在这个表有主键Id
、A, B, C, D, E, F, G
等列
现在我想像这样从这个表中选择行
A=A, B=B, C=C, D=D and G > 132
所以我试图从该表中选择行 A,B,C,D
列具有相同数据和 G 列数据 > 132。
那我该怎么做呢?谢谢。
我尝试了这个查询,但返回相同的 Id 行
SELECT TableA.Id,TableA.UserId,TableA.MaximumHp,TableA.Attack,TableA.Defense,TableA.SpAttack,TableA.SpDefense,TableA.Speed
FROM myTable as TableA
Inner Join myTable as TableB on
TableA.MaximumHp = TableB.MaximumHp
AND TableA.Attack = TableB.Attack
AND TableA.Defense = TableB.Defense
AND TableA.SpAttack = TableB.SpAttack
AND TableA.SpDefense = TableB.SpDefense
AND TableA.Speed = TableB.Speed
AND TableA.Id != TableB.Id
SQL Server 2008 R2
【问题讨论】:
我不明白——A=A、B=B、C=C 和 D=D 将总是为真。你想达到什么目的?样本数据会很有帮助。 你的意思是A列的值为'A'吗? 我正在尝试从该表中选择行 A、B、C、D 列具有相同数据的行。 那么,A、B、C、D 列是什么数据类型? 它们可以是整数和varchar。这有关系吗? 【参考方案1】:听起来您想将表连接到自身
SELECT *
FROM Table t1
Inner Join Table t2 on t1.A = t2.A
AND t1.B = t2.B
AND t1.C = t2.C
AND t1.D = t2.D
AND t1.G > 132
AND t1.ID <> t2.ID
【讨论】:
你好。我试过了,但选择了相同的 ID 行。 t1 和 t2 在这里是同一张表,因为我想比较同一张表的不同行 @MonsterMMORPG ...再看一遍,我没有比较相同的行,因此最后一个 AND 子句t1.ID <> t2.ID
我没有收到任何错误。返回表中的所有行。
大声笑....你评估过你应该得到什么吗?制作一个简单的测试用例,然后验证它是否有效。
是的,我评估过。我有很多行是唯一的,因此查询不应返回表中的所有行。【参考方案2】:
我认为你的意思是重复。告诉我这是不是你要找的东西。
SELECT [Table].A, [Table].B, [Table].C, [Table].D, [Table].E, [Table].F, [Table].G
FROM [Table] LEFT JOIN (SELECT A, B, C, D FROM [Table]
GROUP BY A, B, C, D
HAVING count(*) > 1)
AS sub ON ([Table].A=sub.A) AND ([Table].B=sub.B) AND ([Table].C=sub.C) AND ([Table].D=sub.D)
WHERE G>132 and sub.A is not null;
这将为您提供 a、b、c 和 D 等于表中另一行的所有行...并且 G > 132
【讨论】:
是的,看起来重复。现在要检查你的答案谢谢。 你好。我试过了,但它返回了所有不重复的行:pastebin.com/qzMbkAZ2 如果表中的所有行都有重复,那么它将返回所有行。 所有行没有重复。我在 where 子句中犯了一个小错误,现在修复了它。现在再试一次,查询仍在运行。 我希望这个查询不会进入游戏。或者如果是,我希望它不会在游戏进行时运行。我只会在游戏第一次加载或关闭时执行此操作,否则会花费太长时间。以上是关于如何从单个表中选择多个列值相同的行的主要内容,如果未能解决你的问题,请参考以下文章