======原题======甲骨文外连接和常量值
我有多个外的常数加入如下的SQL:
select .. from CLAS MDP, CLAS ORG_CNTRY, CLAS BEN_CNTRY
AND ORG_CNTRY.LAS_ID(+) = 'COUNTRY_LOOKUP'
AND ORG_CNTRY.CB_DT = MDP.CB_DT
AND BEN_CNTRY.LAS_ID(+) = 'COUNTRY_LOOKUP'
AND BEN_CNTRY.CB_DT = MDP.CB_DT
上述查询是否与下面的查询相同?请指教。
select ... from
CLAS MDP left join CLAS ORG_CNTRY on ORG_CNTRY.LAS_ID = 'COUNTRY_LOOKUP' left
join CLAS BEN_CNTRY on BEN_CNTRY.LAS_ID = 'COUNTRY_LOOKUP' where ORG_CNTRY.CB_DT
= MDP.CB_DT and BEN_CNTRY.CB_DT = MDP.CB_DT
======后续问题=======
@Used_By_Already,@Gordon Linoff感谢您的答复。
但是,我的实际查询比我最初发布的要多一点。它如下所示:
MDP.CLAS_ID = 'DIS_PARAMETERS'
AND MDP.CB_DT = <<BusinessDate>>
AND ACCT.ACCT_NO = TXN.ACCT_NO
AND MDP.CTRY_CD = TXN.REC_CTRY_CD
AND TXN.CB_DT BETWEEN ACCT.START_DT and ACCT.END_DT
AND ORG_CNTRY.CLAS_ID(+) = 'COUNTRY_LOOKUP'
AND ORG_CNTRY.CB_DT = MDP.CB_DT
AND BEN_CNTRY.CLAS_ID(+) = 'COUNTRY_LOOKUP'
AND BEN_CNTRY.CB_DT = MDP.CB_DT
AND TXN.SEND_CTRY_CD = ORG_CNTRY.CLAS_SCHM_CD(+)
AND TXN.RCIP_CTRY_CD = BEN_CNTRY.CLAS_SCHM_CD(+)
这可以重写成如下吗?请指教。
select ...
from
CLAS MDP left join CLAS ORG_CNTRY on ORG_CNTRY.CB_DT = MDP.CB_DT
AND ORG_CNTRY.LAS_ID = 'COUNTRY_LOOKUP'
right join ACCT_TRAN TXN on ORG_CNTRY.CLAS_SCHM_CD = TXN.SEND_CTRY_CD
left join CLAS BEN_CNTRY on BEN_CNTRY.CB_DT = MDP.CB_DT
AND BEN_CNTRY.LAS_ID = 'COUNTRY_LOOKUP'
right join ACCT_TRAN TXN on BEN_CNTRY.CLAS_SCHM_CD = TXN.RCIP_CTRY_CD
号联接和过滤谓词可以在'join'条款都去了,即使分离过滤谓词出与内部连接是更符合逻辑,并把它们在'where'条款。这意味着内部和外部连接不可互换是我不喜欢的语法之一。 –
存在一个非常非正式的,基本上不成文的规则,即:*“不要使用正确的外连接”*这里肯定没有理由这么做。但是,您要求确定的答案,而无需访问数据。它只能是最好的猜测,它需要进行测试。注意你**不能声明表格别名TXN两次**,这将永远不会工作。 –