sql >> Databáze >  >> RDS >> Oracle

Vnitřní dotazy na jednu tabulku s podmínkami IN a NOT IN

Chcete-li získat pouze 13 a 15 proveďte následující:

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

To zkontroluje, že 13 a 15 jsou v sadě user_id. Poté zkontroluje, že v sadě není nic jiného.

Uvědomuji si, že použití klauzule have s prohlášením o případu se zpočátku zdá trapné. Můžete však vyjádřit spoustu logiky o různých kombinacích věcí v sadě.



  1. Oracle – více dotazů v jednom výsledku

  2. MySQL Workbench - Jak synchronizovat EER diagram

  3. Jaký je nejvíce doporučený způsob ukládání času v PostgreSQL pomocí Javy?

  4. Uložení souboru v postgres pomocí node-postgres