执行左连接以及where条件

时间:2013-07-01 09:12:31

标签: sql oracle

我正在使用此查询来获取结果,

 SELECT * 
    FROM TRXN_REPORT CNT, 
    TBL_CUSTINFO CUSTADDINFO, 
    TBL_DEAL_EVT EVENT, 
    TBL_MISCADDR CIFMISC       
    WHERE CNT.INTERNAL_REF_NUM = EVENT.INTERNAL_REF_NUM 
    AND CNT.BRANCH = EVENT.BRANCH 
    AND CNT.QFXVERSION = EVENT.QFXVERSION 
    AND CNT.VALUEDATE = EVENT.VALUEDATE 
    AND CNT.LIQ_STATUS = 'L' 
    AND EVENT.EVENTCODE = 'LLIQ' -- Liquidation Event 
    AND CUSTADDINFO.CUSTOMER_NO = CNT.CUST_NUM 
    AND CIFMISC.CUSTOMER_NUMBER = CNT.CUST_NUM 
    AND CUSTADDINFO.REC_STATUS       ='O' 
    AND CIFMISC.REC_STATUS       = 'O' 
    AND MY_PBG_CUSTOMER = 'Y' 
    AND (BUYCCYCODE = 'USD' OR SELLCCYCODE ='USD') 

这里这个条件

  

AND CIFMISC.CUSTOMER_NUMBER = CNT.CUST_NUM

仅获取TBL_MISCADDRTRXN_REPORT表中存在的那些记录,现在作为要求的更改我想要执行左外连接以便获取{中不存在的记录{1}}表,但存在于TBL_MISCADDR中。如何执行此操作以及维护所有条件。

1 个答案:

答案 0 :(得分:0)

您必须在ON的{​​{1}}子句中指定联接的条件。因此,您在WHERE子句中的当前条件应该分为加入表的条件(这些条件移到JOIN子句),其余用于选择行 - 这些条件应保留在{{1子句。示例(根据您的数据不知道我是否正确,但您会明白这一点):

ON

这样您就可以安全地使用WHERE,并且还会包含其他表中不存在记录的行。

  

...获取SELECT * FROM TRXN_REPORT CNT LEFT JOIN TBL_DEAL_EVT EVENT ON CNT.INTERNAL_REF_NUM = EVENT.INTERNAL_REF_NUM AND CNT.BRANCH = EVENT.BRANCH AND CNT.QFXVERSION = EVENT.QFXVERSION AND CNT.VALUEDATE = EVENT.VALUEDATE LEFT JOIN SOME_OTHER_TABLE T ON ... WHERE AND CUSTADDINFO.REC_STATUS ='O' AND CIFMISC.REC_STATUS = 'O' AND MY_PBG_CUSTOMER = 'Y' AND (BUYCCYCODE = 'USD' OR SELLCCYCODE ='USD') .... 表中没有的记录但是   出现在LEFT JOIN

可以使用TBL_MISCADDR完成。