Select 如何从一个表中选择多列值和同一行

Select 如何从一个表中选择多列值和同一行,select,sql-server-2008-r2,Select,Sql Server 2008 R2,我有一个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

我有一个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

SQLServer2008R2听起来像是要将表本身连接起来

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
选择*
来自表t1
t1.A=t2.A上的内部联接表t2
t1.B=t2.B
t1.C=t2.C
t1.D=t2.D
t1.G>132
和t1.ID t2.ID

听起来像是要将表本身连接起来

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
选择*
来自表t1
t1.A=t2.A上的内部联接表t2
t1.B=t2.B
t1.C=t2.C
t1.D=t2.D
t1.G>132
和t1.ID t2.ID

我想你的意思是重复。告诉我这是否是你要找的

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

我认为您的意思是重复。告诉我这是否是你要找的

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

我不明白——a=a、b=b、c=c和D=D始终为真。你想干什么?示例数据会很有用。您的意思是A列有一个值“A”吗?我正在尝试从此表中选择哪些行A、B、C、D列有相同的数据。那么,A、B、C、D列是什么数据类型?它们可以是integer和varchar。这有关系吗?我不明白——A=A,B=B,C=C,D=D都是真的。你想干什么?示例数据会很有用。您的意思是A列有一个值“A”吗?我正在尝试从此表中选择哪些行A、B、C、D列有相同的数据。那么,A、B、C、D列是什么数据类型?它们可以是integer和varchar。那有关系吗?你好。我尝试了这个,但选择了相同的ID行。t1和t2在这里是同一个表,因为我想比较同一行的不同行table@MonsterMMORPG ... 再看一遍,我没有比较相同的行,因此最后一个AND子句
t1.idt2.ID
我没有得到任何错误。返回表中的所有行。lol…。您评估过应该得到什么吗?制作一个简单的测试用例,然后验证它是否有效。我有许多行是唯一的,因此查询不应该返回表中的所有行。Hello。我尝试了这个,但选择了相同的ID行。t1和t2在这里是同一个表,因为我想比较同一行的不同行table@MonsterMMORPG ... 再看一遍,我没有比较相同的行,因此最后一个AND子句
t1.idt2.ID
我没有得到任何错误。返回表中的所有行。lol…。您评估过应该得到什么吗?制作一个简单的测试用例,然后验证它是否有效。我有许多行是唯一的,所以查询不应该返回表中的所有行。是的,看起来是重复的。现在来检查你的答案谢谢。我试过了,但它返回的是所有的行,而不是重复的行:如果表中的所有行都有重复的行,那么它将返回所有的行。所有的行都没有重复的行。我在where子句中犯了一个小错误,现在修复了它。现在重试,查询仍在运行。我希望此查询不会进入游戏。如果是的话,我希望它不会在比赛进行期间运行。我只会在游戏首次加载或关闭时执行此操作,否则会花费太长时间。是的,看起来是重复的。现在来检查你的答案谢谢。我试过了,但它返回的是所有的行,而不是重复的行:如果表中的所有行都有重复的行,那么它将返回所有的行。所有的行都没有重复的行。我在where子句中犯了一个小错误,现在修复了它。现在重试,查询仍在运行。我希望此查询不会进入游戏。如果是的话,我希望它不会在比赛进行期间运行。我只会在游戏首次加载或关闭时执行此操作,否则会花费太长时间。