2016-04-03 5 views
2

このタイプの結合の名前は何ですか?私はすべてを見てきました!このクエリは、背中合わせに内部結合してから、2つのON句を指定します。インナー・ジョインの直後にON句が続くSQL結合のタイプは何ですか?

ボーナスポイント:この方法で参加するとどのようなメリットがありますか?

SELECT 
    <some columns> 
FROM 
    ProductTypes AS t0 
INNER JOIN Table1 AS t1 
    INNER JOIN Table2 AS t2 
     ON t2.CodeId = t1.CodeId 
     AND t2.[Enabled] = 1 
    ON t1.ClassId = t0.ClassId 
+1

内部結合可換ですが、OUTERはありませんJOINS。このスタイルは重要であり、しばしばOUTER JOINSを組み立てるのに非常に役立ちます。この結合は元々INOER JOINにリファクタリングされる前にOUTER JOINとして書き込まれた可能性があります。リファクタリングされたコードを完全に書き換えていないときは、変更フットプリントを最小限に抑えるようにします。 –

答えて

1

これはネストされた結合を実行する形式です。あなたが読みやすさのためにそれをしたいのでなければ、すべての内部で目的はありません。左外側を使用すると便利です。検討してください:

SELECT 
    <some columns> 
FROM 
    ProductTypes AS t0 
LEFT OUTER JOIN Table1 AS t1 
    INNER JOIN Table2 AS t2 
     ON t2.CodeId = t1.CodeId 
     AND t2.[Enabled] = 1 
    ON t1.ClassId = t0.ClassId 

これは何かです。あなたがt1/t0を最後に置かずにそれをした場合、t1/t2 innerは基本的にt1/t0が左外部であるという事実を否定するでしょう。このようにすると、t1レコードを持たないt0レコード(通常の左外部結合のように)ができますが、t2もあるt1レコードのみが表示されます。内部結合は、この下位レベルで実行されます。

も参照してください:

http://sqlity.net/en/1435/a-join-a-day-nested-joins/

SQL join format - nested inner joins

2

なお、INNER JOINとなります。

それは

SELECT <some columns> 
FROM producttypes AS t0 
     INNER JOIN table2 AS t2 
       ON t1.classid = t0.classid 
     INNER JOIN table1 AS t1 
       ON t2.codeid = t1.codeid 
        AND t2.[enabled] = 1 

コンパイラとして解釈されますがJOINためここ

が内部で何が起こっているかのデモでの配置を変更するのに十分なスマートです。私は似たJOINために自分のテーブルのを使用している

あなたのクエリJOINため

SELECT 
    * 
FROM 
    users AS t0 
INNER JOIN products AS t1 
    INNER JOIN orders AS t2 
     ON t2.productid = t1.productid 
     AND t2.productid = 1 
    ON t2.uid = t0.uid 

実行計画

enter image description here

並び替えJOINため

SELECT 
    * 
FROM 
    users AS t0 
     INNER JOIN orders AS t2 
      ON t2.uid = t0.uid 
INNER JOIN products AS t1 
     ON t2.productid = t1.productid 
     AND t2.productid = 1 
あなたは、両方が同一の実行計画を持って見ることができるように

実行計画

enter image description here

。したがって、違いはありません。

+0

私はこの回答が好きですが、なぜ私はそれを見つけたのですか? – NTDLS

+0

@NTDLS - 誰がそれを見つけましたか? –

+0

私はそれを実動コードで見つけましたが、私には意味がありませんでした。今私はなぜ知っている! – NTDLS

関連する問題