2017-03-09 34 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/