我有一个包含多个列的表,并且只想查找A和B组合不同的表。
可能有几个这样的行,我想得到A和B的每个不同组合的行的每个字段(假设还有C和D列)。
澄清:
我想说点什么
for each distinct A/B combination
get C and D
答案 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:
答案 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