2014-09-23 80 views
0

背景:對於SPRIDEN_id,sprhold_hldd_code可能具有一個或多個值或NO值。Oracle SQL - 不存在 - 字符串不存在於值列表中

,我需要選擇SP.SPRIDEN_ID,SP.SPRIDEN_LAST_NAME,SP.SPRIDEN_FIRST_NAME,SR.SHRDGMR_SEQ_NO,SR.SHRDGMR_PROGRAM

凡(sh.sprhold_hldd_code = 'RH')不存在。

到目前爲止,沒有記錄被返回。

我發現如果我在sh.sprhold_hldd_code ='Z'中放入一個不在可能值列表中的代碼(如Z),那麼它將返回結果。

DATA: (column names abbreviated) 
SPRIDEN_ID SPRIDEN_LAST SPRIDEN_FIRST SHRDGMR_SEQ_NO SHRDGMR_PROGRAM sh.sprhold_hldd_code 
100001  Smith   Sue   1    ALHE   RH 
100001  Smith   Sue   1    ALHE   AA 
100001  Smith   Sue   1    ALHE   BB 
100005  Conners  Tim   1    BUSN   RH 
100008  Occent   Mary   1    MATH   CC 
100008  Occent   Mary   1    MATH   AA 

Expected Results: Mary is the only record that does NOT have the RH code. 

SPRIDEN_ID SPRIDEN_LAST_NAME SPRIDEN_FIRST_NAME SHRDGMR_SEQ_NO SHRDGMR_PROGRAM 
100008  Occent    Mary    1    MATH    

雖然我沒有收到任何結果。

CODE: 
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 
and not exists 
(select sh.sprhold_pidm 
from sprhold sh 
where sh.sprhold_hldd_code = 'RH') 

回答

3

爲了得到你想要的數據,我會建議使用聚集了having條款:

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; 

你有兩個問題,你的方法。首先是子查詢返回true或false,並影響原始查詢中的所有行。你真的想要一個相關的子查詢。但是,即使你得到了正確的結果,你也會爲瑪麗返回重複的行。這解決了這兩個問題。

+0

是的!這正是我所期待的。我知道有類似於NVL2(表達式1,表達式2,表達式3)的東西,但不是前面的空值!謝謝你:-) – 2014-09-23 19:42:34

1

你可以做小的變化,並嘗試

and sh.sprhold_pidm not in 
(select sh.sprhold_pidm 
from sprhold sh 
where sh.sprhold_hldd_code = 'RH') 
+0

你的答案對於我在另一個更密集的腳本中遇到的問題起作用。謝謝!! – 2014-09-23 21:03:12

相關問題