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

oracle用に書かれた古いコードをSQL SERVER上で実行できるように変換しようとしています。私は前に(+)を使っていませんでしたが、素早いgoogleからは外部結合だと思っていました。右に座っているときはleft joinなので、locn_hdrとpick_locn_dtlの一致。そうですか?これを左外部結合と見なしますか?

私がこれをテストしたときにだけ、私は期待どおりに動作していないようです。 Oracleで

答えて

3

(+)が結合式の右側にあるので、それは左であるに参加の表の(つまり、pld LEFT JOIN lhに等しい)のテーブルにあるので、pld(すなわち、PICK_LOCN_DTL)からlhLOCN_HDR)の等価行と一致するすべての行が戻されます。

左/右の意味は、(+)を持つ式の左/右に適用され、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

(+)は、ここで、外部結合であることは、それが違いを説明して良いのリンクが

ある
https://blog.codinghorror.com/a-visual-explanation-of-sql-joins/ 
関連する問題