sql >> Databasteknik >  >> RDS >> Oracle

Inre frågor på en enda tabell med IN- och NOT IN-villkor

För att få endast 13 och 15, gör följande:

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

Detta kontrollerar att 13 och 15 finns i uppsättningen user_id. Den kontrollerar sedan att inget annat finns i uppsättningen.

Jag inser att det verkar besvärligt att använda haklausulen med fallförklaringen till en början. Men du kan uttrycka massor av logik om olika kombinationer av saker i uppsättningen.



  1. SQL-funktion med parametrar som kan vara NULL

  2. MySQL:Vad är nyckelbufferten

  3. Kan jag byta den "anslutna" användaren i ett sql-skript som kommer från mysql?

  4. Mysqli hämta array n:te raden