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.