Най-простият вариант обикновено е нещо подобно
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
клаузата идентифицира стойностите, които ви интересуват. HAVING
клауза ви казва колко от тези стойности трябва да съществуват. Ако искате всички редове да имат поне 2 от 3-те стойности, например, бихте променили HAVING
клауза за търсене на COUNT
от 2.
Ако конкретен val
се гарантира, че ще се случи най-много веднъж на id
, можете да премахнете distinct
в HAVING
клауза.