如何从单个表中选择多个列值相同的行

Posted

技术标签:

【中文标题】如何从单个表中选择多个列值相同的行【英文标题】:How to select multiple columns values same rows from single table 【发布时间】:2011-12-28 22:02:21 【问题描述】:

我有一个 SQL Server 表。现在这个表有主键IdA, 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 &lt;&gt; 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 子句中犯了一个小错误,现在修复了它。现在再试一次,查询仍在运行。 我希望这个查询不会进入游戏。或者如果是,我希望它不会在游戏进行时运行。我只会在游戏第一次加载或关闭时执行此操作,否则会花费太长时间。

以上是关于如何从单个表中选择多个列值相同的行的主要内容,如果未能解决你的问题,请参考以下文章

如何在表中选择Record的链接包含多个不同类的行,每列具有相同的类名

根据另一列的字段值选择具有相同列值的行

在 SQL Server 中,如何选择共享公共列值的行?

将多个列值插入单个插入值?

如何从单个子查询中获取 2 列值

如何将多个列值连接到 Pandas 数据框中的单个列中