Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle SQL - Não Existe - a string não existe em uma lista de valores


Para obter os dados desejados, recomendo usar a agregação com um having cláusula:
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;

Você tem dois problemas com sua abordagem. A primeira é que a subconsulta retorna verdadeiro ou falso e afeta todas as linhas da consulta original. Você realmente quer uma subconsulta correlacionada. Mas, mesmo que você tenha acertado, você estaria retornando linhas duplicadas para Mary. Isso resolve ambos os problemas.