2011-12-28 138 views
0

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

+3

我不明白 - A = A,B = B,C = C和D = D将总是*为真。你在想什么?示例数据会很有帮助。 – Eric 2011-12-28 22:04:19

+0

你的意思是说A列的值是'A'? – Lamak 2011-12-28 22:05:20

+0

我想从这张表中选择A行,B列,C列,D列有相同数据的行。 – MonsterMMORPG 2011-12-28 22:05:36

回答

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

+0

是看重复。现在要检查你的答案,谢谢。 – MonsterMMORPG 2011-12-28 22:27:02

+0

你好。我试过了,但它返回的行不是重复的:http://pastebin.com/qzMbkAZ2 – MonsterMMORPG 2011-12-28 22:38:55

+0

如果表中的所有行都有重复,那么它将返回所有这些行。 – 2011-12-28 22:44:27

4

听起来像是你想加入表本身

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 
+0

+1 - 看起来这是你想要的 – Lamak 2011-12-28 22:14:26

+0

你好。我尝试过,但选择了相同的ID行。 t1和t2在这里是相同的表,因为我想比较同一表的不同行 – MonsterMMORPG 2011-12-28 22:19:23

+0

@MonsterMMORPG ...再看一遍我没有比较相同的行,因此最后一个AND子句t1.ID <> t2.ID' – 2011-12-28 22:27:56

相关问题