我有一张这样的桌子:
ID VALUE
--------------------
A | abc <---
--------------------
A | def <---
--------------------
A | ghi <---
--------------------
B | abc x
--------------------
C | abc x
--------------------
C | def x
--------------------
C | xyz x
--------------------
D | abc <---
--------------------
D | def <---
--------------------
D | ghi <---
我想选择一个ID与所有值(abc,def AND ghi)匹配的所有ID
结果应为
A
D
答案 0 :(得分:2)
您可以使用条件聚合:
select id
from t
where value in ('abc', 'def', 'ghi')
group by id
having count(*) = 3;
如果可以有重复的id
/ value
对,请使用count(distinct id)
而不是count(*)
。
如果表中只有三个值,则可以省去where
。或者,如果您想要表中的所有值:
select id
from t
group by id
having count(*) = (select count(distinct value) from t)