Sql 执行左连接以及where条件
我用这个查询得到结果Sql 执行左连接以及where条件,sql,oracle,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.QFXVERSIO
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')
这里是这个条件
和CIFMISC.CUSTOMER\u NUMBER=CNT.CUST\u NUM
只获取那些同时存在于
TBL\u miscadrr
和TRXN\u REPORT
表中的记录,现在作为要求的改变,我想执行左外连接,以便获取那些不在TBL\u miscadrr
表中但存在于TRXN\u BATCHREPORT\u WRK
中的记录。如何在维护所有where条件的同时执行此操作。您必须在join
的ON
子句中指定join的条件。因此,WHERE子句中的当前条件应分为连接表的条件(这些条件移动到ON
子句),其余条件用于选择行,这些条件应保留在WHERE
子句中。示例(根据您的数据,我不知道是否正确,但您会明白的):
通过这种方式,您可以安全地使用左联接
,其他表中不存在记录的行也将包括在内
。。。获取TBL\u MISCADDR
表中不存在但
出现在TRXN\u BATCHREPORT\u WRK
中
这将使用
TRXN\u BATCHREPORT\u WRK LEFT JOIN TBL\u MISCADDR ON
完成。您应该开始使用显式JOIN
语法,而不是where
子句中的隐式(非常古老)连接,左连接在哪里?@a_horse\u,没有名字谢谢您指导我正确的方向
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')
....