Oracle
 sql >> база данни >  >> RDS >> Oracle

Вътрешни заявки на една таблица с условия IN и NOT IN

За да получите само 13 и 15, направете следното:

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

Това проверява дали 13 и 15 са в набора user_id. След това проверява дали няма нищо друго в комплекта.

Осъзнавам, че използването на клаузата за наличие с оператора case изглежда неудобно в началото. Можете обаче да изразите много логика за различни комбинации от неща в комплекта.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Грешка при изпълнение на съхранена процедура на Oracle в SSRS:PLS-00306:грешен номер или типове аргументи при извикване на

  2. Как да покажа дата в различен формат в oracle

  3. sqlplus:грешка при зареждане на споделени библиотеки:libsqlplus.so:не може да се отвори споделен обектен файл:Няма такъв файл или директория

  4. Как да получите последния ден от месеца в Oracle

  5. Oracle:Как да извикам претоварена процедура?