Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Truy vấn bên trong trên một bảng duy nhất với các điều kiện IN và NOT IN

Để nhận được chỉ 13 và 15, hãy làm như sau:

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

Điều này kiểm tra xem 13 và 15 có nằm trong nhóm user_id hay không. Sau đó, nó sẽ kiểm tra xem không có gì khác trong tập hợp.

Tôi nhận thấy rằng việc sử dụng mệnh đề có với câu lệnh trường hợp lúc đầu có vẻ khó xử. Tuy nhiên, bạn có thể diễn đạt rất nhiều logic về các kết hợp khác nhau của các thứ trong tập hợp.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nối các bảng với LIKE (SQL)

  2. CriteriaQuery bộ lọc tháng và năm

  3. Có cách nào tôi có thể tăng tốc (các) chèn sau không?

  4. Nhận XEM ddl bằng cách sử dụng truy vấn

  5. thu thập hàng loạt bằng cách sử dụng để cập nhật