2011-05-30 49 views
4

我有一个表有多个列,只想找到A和B的组合不同的表。一个DISTINCT问题

可能有几个这样的行,我想为每个A和B的不同组合的行的每个字段(假设也有列C和D)。


澄清:

我想这样说

for each distinct A/B combination 
    get C and D 
+1

高兴的更新,但人们谁回答不会收到有关您的更改的警报。 – 2011-05-30 06:04:08

回答

6

使用EXISTS:

SELECT a.c, a.d 
    FROM YOUR_TABLE a 
WHERE EXISTS (SELECT NULL 
       FROM YOUR_TABLE b 
       WHERE b.a = a.a 
        AND b.b = a.b 
      GROUP BY b.a, b.b 
       HAVING COUNT(*) > 1) 

使用JOIN:

SELECT a.c, a.d 
    FROM YOUR_TABLE a 
    JOIN (SELECT b.a, b.b 
      FROM YOUR_TABLE b 
     GROUP BY b.a, b.b 
     HAVING COUNT(*) > 1) x ON x.a = a.a 
           AND x.b = a.b 

EXISTS可能是最好,如果你不打算从派生表的SELECT子句中的列返回。

+0

+1,演示优越的sql fu :) – 2011-05-30 04:01:46

+0

不应该是'有计数(*)= 1'吗?我可能会误解这个问题,但这听起来只有具有不同值('a,b')的行才需要。 – a1ex07 2011-05-30 04:13:22

+0

@ a1ex07:我以为OP希望不同的对具有重复 - 是不是“每个不同组合的几行”推断出什么? – 2011-05-30 04:15:23

1

你没有回答哪一行的问题,以显示当你有两排,A和B相同的值。例如:

A B C D 
============= 
0 1 5 5 
0 1 4 7 
0 0 1 1 

如果你想A和B的只有唯一实例,应该返回C = 5,D = 5还是C = 4,D = 7?如果您可以决定如何使用聚合函数返回值,则可以在C和D列上使用GROUP BY A, B子句和聚合方法。

例如,以下将返回C的最大价值和d:

SELECT A, B, MAX(C), MAX(D) 
FROM  myTable 
GROUP BY A, B 

有关集合函数的完整列表,请访问此网站:http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html