Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle SQL - Not Exists - Zeichenfolge ist in einer Werteliste nicht vorhanden

Um die gewünschten Daten zu erhalten, würde ich empfehlen, die Aggregation mit einem having zu verwenden Klausel:

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;

Sie haben zwei Probleme mit Ihrem Ansatz. Erstens gibt die Unterabfrage entweder wahr oder falsch zurück und wirkt sich auf alle Zeilen in der ursprünglichen Abfrage aus. Sie wollen wirklich eine korrelierte Unterabfrage. Aber selbst wenn Sie das richtig verstanden hätten, würden Sie doppelte Zeilen für Mary zurückgeben. Dies löst beide Probleme.