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

Oracle SQL - Not Exists - ciąg nie istnieje na liście wartości

Aby uzyskać żądane dane, polecam użycie agregacji z having klauzula:

Select SP.SPRIDEN_ID, SP.SPRIDEN_LAST_NAME, SP.SPRIDEN_FIRST_NAME, SR.SHRDGMR_SEQ_NO, 
       SR.SHRDGMR_PROGRAM
from spriden SP join
     SHRDGMR SR
     on SP.SPRIDEN_PIDM = SR.SHRDGMR_PIDM join
     SPRHOLD SH
     on sp.spriden_pidm = sh.sprhold_pidm
where SR.SHRDGMR_DEGS_CODE = 'PN' and
      SR.SHRDGMR_TERM_CODE_GRAD >= '201489' and
     sp.spriden_change_ind is NULL
group by SP.SPRIDEN_ID, SP.SPRIDEN_LAST_NAME, SP.SPRIDEN_FIRST_NAME, SR.SHRDGMR_SEQ_NO, 
         SR.SHRDGMR_PROGRAM
having sum(case when sh.sprhold_hldd_code = 'RH' then 1 else 0 end) = 0;

Masz dwa problemy ze swoim podejściem. Po pierwsze, podzapytanie zwraca prawdę lub fałsz i wpływa na wszystkie wiersze oryginalnego zapytania. Naprawdę potrzebujesz skorelowanego podzapytania. Ale nawet jeśli masz rację, zwracasz Mary zduplikowane wiersze. To rozwiązuje oba te problemy.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. błąd prawego nawiasu ORA-00907 w Oracle

  2. jak połączyć dwie tabele, aby uzyskać ostatnie nowe wiersze z tabeli 2, a resztę z tabeli 1?

  3. ORA-01830:obraz w formacie daty kończy się przed konwersją całego ciągu wejściowego

  4. PLSQL - Iinsert w wyzwalaczu powodujący pętlę rekurencyjną

  5. Jak zmienić nazwę procedury Oracle