在第二列中选择与几个值匹配的所有值

时间:2019-06-06 11:23:55

标签: sql oracle select

我有一张这样的桌子:

    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

1 个答案:

答案 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)