sql >> Database teknologi >  >> RDS >> Oracle

Indre forespørgsler på en enkelt tabel med IN og NOT IN-betingelser

For at få kun 13 og 15, gør følgende:

select user_id
from my_table
group by user_id
having max(case when role_id = 13 then 1 else 0 end) = 1 and  -- has 13
       max(case when role_id = 15 then 1 else 0 end) = 1 and  -- has 15
       max(case when role_id not in (13, 15) then 1 else 0 end) = 0 -- nothing else

Dette kontrollerer, at 13 og 15 er i bruger-id-sættet. Den kontrollerer derefter, at der ikke er andet i sættet.

Jeg er klar over, at det umiddelbart virker akavet at bruge have-klausulen med sagsfremstillingen. Du kan dog udtrykke masser af logik om forskellige kombinationer af ting i sættet.



  1. Yii2 QueryBuilder-opdatering med Join

  2. Med sqlalchemy hvordan man dynamisk binder til databasemotoren på en per-anmodningsbasis

  3. JPA Pessimistisk låseforsøg timeout aldrig

  4. INSERT-sætningen var i konflikt med FOREIGN KEY-begrænsningen