L'option la plus simple est généralement quelque chose comme ça
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
Le WHERE
La clause identifie les valeurs qui vous intéressent. La clause HAVING
La clause vous indique combien de ces valeurs doivent exister. Si vous vouliez toutes les lignes qui avaient au moins 2 des 3 valeurs, par exemple, vous changeriez le HAVING
clause pour rechercher un COUNT
de 2.
Si un val
particulier est garanti de se produire au plus une fois par id
, vous pouvez éliminer le distinct
dans le HAVING
clause.