Det enklaste alternativet är i allmänhet något sånt här
SQL> ed
Wrote file afiedt.buf
1 with x as (
2 select 1 id, 1 val from dual union all
3 select 1 id, 2 val from dual union all
4 select 1 id, 3 val from dual union all
5 select 2 id, 1 val from dual union all
6 select 2 id, 2 val from dual union all
7 select 3 id, 1 val from dual union all
8 select 3 id, 2 val from dual union all
9 select 3 id, 3 val from dual union all
10 select 4 id, 1 val from dual
11 )
12 select id
13 from x
14 where val in (1,2,3)
15 group by id
16* having count(distinct val) = 3
SQL> /
ID
----------
1
3
WHERE klausulen identifierar de värden du är intresserad av. HAVING klausul talar om hur många av dessa värden som behöver existera. Om du till exempel ville ha alla rader som hade minst 2 av de 3 värdena, skulle du ändra HAVING sats för att leta efter en COUNT av 2.
Om en viss val kommer garanterat att inträffa högst en gång per id , kan du eliminera distinct i HAVING klausul.