2012-04-13 10 views
3

2つの異なる結合構文を使用して、次のクエリの違いを知りたいと思います。私は継承されたいくつかのコードでこれを見て、結果が常に同じであれば好奇心が強いです。そうでなければ、なぜあなたはもう一方のものを使うのでしょうか?2つのTSQL結合の違いは何ですか?

クエリ#1例:

SELECT * FROM TableA a 
    INNER JOIN TableB b 
    INNER JOIN TableC c 
     ON b.TableBId = c.TableCId 
    ON b.TableBId = a.TableAId 

クエリ#2例:

SELECT * FROM TableA a 
    INNER JOIN TableB b 
    ON b.TableBId = a.TableAId 
    INNER JOIN TableC c 
    ON b.TableBId = c.TableCId 
+3

違いがあれば実行計画を見てください。 –

+0

#1が有効なSQLであることを確認してください。 http://msdn.microsoft.com/en-us/library/ms177634.aspxによると、どのように動作するのかわかりません。 – Alex

+3

@Alexはい、有効なSQLです。実行エラーは表示されません:http://sqlfiddle.com/#!3/b00427/1 –

答えて

2

すでに述べたように、execution plansを確認して、実際に同じクエリであることを確認できます。しかし、私はほとんど彼らがいることは確信しています。

あなたはなぜあなたはもう一方を選択するのですか?私はこれがスタイルの好みになると言います。ほとんどの場合、将来の読者のための明確な定義があるため、クエリ#2が表示されます。本当に複雑なクエリを作成した場合、得られるメリットは劇的に増加します。

私は本当にそれが読めなくなりすぎて使用されるべきではないと本当に信じているので、他のアプローチを保証することはできません。繰り返しますが、それは私の意見であり、その理由は意見/スタイルになります。しかし

は、標準的な方法はQUERY2あるので、私はそれに固執するだろう:)...しかし、再び、私だけ

+0

"標準的な方法はquery2です" - 両方のクエリはSQL標準に準拠しています(意味的には同等です)。 – onedaywhen

+0

業界標準のように標準化されています。はい、どちらもSQL標準ですが、ごく少数の開発者がquery1を書き込む方法で記述します –

0

execution planをプレビューしてください。それはまったく同じである可能性が非常に高いでしょう。

0

クエリの実行プランはまったく同じです。

関連する問題