sql >> Database >  >> RDS >> Oracle

Innerlijke zoekopdrachten op een enkele tabel met IN- en NIET IN-voorwaarden

Om alleen . te krijgen 13 en 15, doe dan het volgende:

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

Hiermee wordt gecontroleerd of 13 en 15 in de set user_id staan. Het controleert dan of er niets anders in de set zit.

Ik realiseer me dat het gebruik van de hebbende clausule met de case-statement in eerste instantie onhandig lijkt. Je kunt echter veel logica uitdrukken over verschillende combinaties van dingen in de set.



  1. Hoe de MySQL-tabelgrootte voor tabellen in de database te krijgen?

  2. Oracle ROWID als functie/procedure parameter

  3. SUM() Functie in MariaDB

  4. Een database-e-mailaccount toevoegen aan een profiel (T-SQL)