一个DISTINCT问题

时间:2011-05-30 03:47:15

标签: mysql sql

我有一个包含多个列的表,并且只想查找A和B组合不同的表。

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


澄清:

我想说点什么

for each distinct A/B combination
   get C and D

3 个答案:

答案 0 :(得分: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
如果你不打算在SELECT子句中从派生表中返回列,那么

EXISTS可能更可取。

答案 1 :(得分:2)

这听起来应该使用GROUP BY来解决,但也可能是这个问题指定的UNION:

Select distinct from multiple fields using sql

答案 2 :(得分: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