Den enkleste mulighed er generelt noget som dette
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
klausul identificerer de værdier, du er interesseret i. HAVING
klausul fortæller dig, hvor mange af disse værdier skal eksistere. Hvis du f.eks. ville have alle de rækker, der havde mindst 2 af de 3 værdier, ville du ændre HAVING
klausul for at lede efter en COUNT
af 2.
Hvis en bestemt val
er garanteret højst én gang pr. id
, kan du fjerne den distinct
i HAVING
klausul.