我不确定如何真正寻找这个......
假设我有一个像这样的简单表
ID Type
1 0
1 1
2 1
3 0
4 0
4 1
如何选择所有类型均为0和1的ID?
答案 0 :(得分:4)
SELECT id,type
FROM t
GROUP BY id
HAVING SUM(type=0)>0
AND SUM(type=1)>0
您只需按ID分组,而不是使用后置聚合过滤来检查0和1。
答案 1 :(得分:2)
非常昂贵且查询无法按键。
SELECT ID FROM foo AS foo0 JOIN foo AS foo1 USING (ID) WHERE foo0.Type=0 AND foo1.Type=1 GROUP BY foo0.id.
答案 2 :(得分:1)
更通用的方法是在id列上为需要测试的每个值使用CASE列与GROUP BY结合使用。这意味着如果您有n个条件要测试,那么您将有一个列,指示是否满足给定ID的每个条件。然后HAVING条件变得微不足道,您可以像任何多列过滤器一样使用它,或者使用分组作为子查询,代码看起来更简单,逻辑变得更容易理解。
SELECT id, Type0,Type1
FROM (
SELECT id,
Type0 = max(CASE WHEN type = 0 THEN TRUE END)
, Type1 = max(CASE WHEN type = 1 THEN TRUE END)
FROM t
GROUP BY id
) pivot
WHERE Type0 = TRUE and Type1 = TRUE