Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Innere Abfragen für eine einzelne Tabelle mit IN- und NOT IN-Bedingungen

nur zu bekommen 13 und 15 gehen Sie wie folgt vor:

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

Dadurch wird überprüft, ob 13 und 15 im user_id-Satz enthalten sind. Es prüft dann, ob nichts anderes in der Menge ist.

Mir ist klar, dass die Verwendung derhaving-Klausel mit der case-Anweisung zunächst umständlich erscheint. Sie können jedoch viel Logik über verschiedene Kombinationen von Dingen im Set ausdrücken.