Oracle (+)连接语法转换为SQL Server T-SQL语法问题求助
转换错误分析与正确方案
错误点
- 连接类型写反:Oracle老式语法中
(+)标注在哪个表的字段上,代表该表为外连接的可选表(匹配不到时返回NULL)。原语句ee.fourth_insert(+) = ce.client_reference和ee.identification_code(+) = 'OCCP1'都给ee表的字段加了(+),说明逻辑是client ce 左外连接 exclusions_endorsements ee,你写RIGHT OUTER JOIN完全搞反了关联方向,会导致结果不符合预期。 - 语法冗余错误:
FROM client ce,后面多写了逗号,和显式JOIN语法混用会导致语法解析错误或逻辑混乱。
正确T-SQL语句
SELECT client_name1, personal_business_ind, birth_date, sex FROM client ce LEFT OUTER JOIN [CLOAS].[EE_ExclusionsEndorsements] ee ON ee.fourth_insert = ce.client_reference AND ee.identification_code = 'OCCP1' WHERE ce.client_reference = @clientid ORDER BY ee.run_date_last_trans DESC;
逻辑一致性说明
上述语句和原Oracle逻辑完全对齐:保留client表中满足client_reference = @clientid的所有记录,关联ee表时匹配不到的话ee相关字段返回NULL,不会过滤掉ce的记录,排序规则也和原语句一致。
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

