2017-03-09 39 views
1
SELECT * FROM LOCN_HDR LH, PICK_LOCN_DTL PLD WHERE pld.locn_id = lh.locn_id(+) 

我正在尝试转换为Oracle编写的一些旧代码,以便能够在SQL SERVER上运行它。我之前没有使用(+),但是从一个快速谷歌我导致相信这是一个外部联接,当它坐在右侧,这是一个左连接,所以从locn_hdr加上一切,再加上pick_locn_dtl的任何匹配。是对的吗?你认为这是一个左外连接吗?

只有当我测试这个,它似乎没有按我的预期工作。

回答

3

由于(+)是联接表达式的右侧,这是一个左连接上表达式(即等于pld LEFT JOIN lh)左边的表格,因此它将带来与来自lhLOCN_HDR)的等效行相匹配的pld(即PICK_LOCN_DTL)的每一行。

左/右内涵适用于具有(+)本身的表达式的左侧/右侧,而不适用于FROM子句中表的顺序。

这将给ANSI标准加入的

SELECT * 
    FROM pick_locn_dtl PLD 
    LEFT JOIN locn_hdr LH 
     ON pld.locn_id = lh.locn_id 
+0

@BriteSponge语法 - 感谢编辑和在等效ANSI-SQL兼容的加入! – Phylyp

0
在甲骨文

的(+)是OUTER JOIN,这里是一个很好的链接,它解释了区别

https://blog.codinghorror.com/a-visual-explanation-of-sql-joins/