多表外連線的使用

flzhang發表於2015-06-30

目前需要找的報表如下
imie號,一級代理商進貨日期,二級代理商發貨日期,渠道銷售日期,門店銷售日期,型號,實際開機城市,經度,緯度等等

需要查詢的條件是根據一級代理商的code和門店銷售日期(4,5月)找出對應條件內imie的渠道資訊

於是根據上述條件和報頭,以及相應表關係需要將各表連線後取值,在連線時必須考慮外連線的情況
 FROM    MCS_HQ.MA_DC_SERL T1     --存放從源發貨到目的地的關鍵資訊,如發貨日期等    
                ,MCS_HQ.HI_GSCM_FOTA T2   --存放實際開機資訊,如開機日期,型號
                ,MCS_HQ.HI_SALE_CHNL T3   --存放渠道銷售資訊
                ,MCS_HQ.HI_SALE T4        --存放銷售資訊,主要是促銷員報的銷量
                ,MCS_HQ.HI_GSCM_FOTA_REGN T5 --存放實際開機的地點,如經緯度和城市
                ,T_RPO T6
        WHERE   T1.DC_ID = 'CC0541015'
        AND     T1.DIST_CHNL_DIV = 'HHP'
        AND     T2.SERL_NO(+) = T1.SERL_NO
        AND     T3.SERL_NO = T1.SERL_NO
        AND     T3.SALE_YMD BETWEEN '20150401' AND '20150531'
        AND     T4.SERL_NO(+) = T1.SERL_NO
        AND     T5.IMEI(+) = T1.SERL_NO
        AND     T6.SERL_NO(+) = T1.SERL_NO;
首先這裡有兩個查詢條件是必須遵守的,必須找出的是這個兩個查詢條件中的資料,那麼就應以這兩個查詢條件的結果集為
基準做外連線,也就是說,客戶是CC0541015且銷售日期在4,5月的資料對應的imie都要顯示出來,那麼以這個結果集連線的
其他表都要用外連線。因此這裡T2,T4,T5連線時都用外連線,然後T3沒有用,因為其查詢條件是限定的,因此即便外連線表
根據日期條件還是會選出指定日期的資料,所以T3,表外連線無意義。

這裡因為業務原因一級代理商的code的條件會根據不同基準改變,如按二級代理商的上級代理商為基準,也可以查詢上述報表
但實現相同的邏輯,在各表連線時外連線的使用就不相同
FROM    MCS_HQ.MA_DC_SERL T1
                ,MCS_HQ.HI_GSCM_FOTA T2
                ,MCS_HQ.HI_SALE_CHNL T3
                ,MCS_HQ.HI_SALE T4
                ,MCS_HQ.HI_GSCM_FOTA_REGN T5
                ,T_RPO T6
        WHERE  
                T3.CHNL_SUPP_DC_ID = 'CC0541015'
        AND     T1.DIST_CHNL_DIV(+) = 'HHP'
        AND     T2.SERL_NO(+) = T3.SERL_NO
        AND     T3.SERL_NO = T1.SERL_NO(+)
        AND     T3.SALE_YMD BETWEEN '20150401' AND '20150531'
        AND     T4.SERL_NO(+) = T3.SERL_NO
        AND     T5.IMEI(+) = T3.SERL_NO
        AND     T6.SERL_NO(+) = T3.SERL_NO; 
實際表連線時將以T3表的上級代理商code為條件,這是將以上級代理商code和銷售日期(4,5)月為基準顯示此結果集中所有imie,
其他表和此結果集連線使用外連線,因此這裡T1,T2,T4,T5都要做表外連線,且他們的查詢條件也要使用外連線,這樣才能
保證兩種方法的查詢結果意義一致

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/750077/viewspace-1717049/,如需轉載,請註明出處,否則將追究法律責任。

相關文章