Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Zapytania wewnętrzne w jednej tabeli z warunkami IN i NOT IN

Aby otrzymać tylko 13 i 15, wykonaj następujące czynności:

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

Sprawdza to, czy 13 i 15 znajdują się w zestawie user_id. Następnie sprawdza, czy w zestawie nie ma nic więcej.

Zdaję sobie sprawę, że użycie klauzuli posiadającej w instrukcji case wydaje się początkowo niezręczne. Możesz jednak wyrazić wiele logiki na temat różnych kombinacji elementów w zestawie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Funkcja potokowa wywołująca inną funkcję potokową

  2. Uzyskaj ostatni identyfikator wstawiania za pomocą Oracle 11g za pomocą JDBC

  3. Jak wprowadzać znaki specjalne, takie jak &w bazie danych Oracle?

  4. java.lang.ClassCastException:oracle.sql.TIMESTAMP nie może być rzutowany na java.sql.Timestamp

  5. SQLPlus Błąd AUTO_INCREMENT