2017-03-25 15 views
0

Query1を変更した場合:は、クエリに参加 - 結合テーブルの順序が

select * from t1 inner join t2 on t1.id = t2.id 
        left join t4 on t2.id = t4.id 
        left join t3 on t2.id = t3.id 

がQUERY2:

select * from t1 inner join t2 on t1.id = t2.id 
        left join t3 on t2.id = t3.id 
        left join t4 on t2.id = t4.id 

をQuery1をしてQUERY2からの結果は同じであるか、ないのだろうか?

+0

あなたの問題は何ですか? –

+0

質問を再訪してください – Len

+1

同じ行が表示されます。しかし、あなたはORDER BY句を指定していないので、エンジンはこれらの行を異なる順序で並べ替えることができます。 – Frazz

答えて

0

異なるjoinオーダーの結合を比較するときは注意が必要です。結合がすべて内部結合の場合、順序は関係ありません。あなたの例には外部結合があります。 T1内から

はt2.id = t3.id

from t1 inner join 
    t2 
    on t1.id = t2.id left join 
    t3 
    on t2.id = t3.id left join 
    t4 
    on t2.id = t4.id 
にt2.id = t4.id T3の参加左にt1.id = t2.id T4に参加左に T2に参加します

この場合、2つの結合の条件は互いに独立しています。すなわち、t3t4は、より早く発生するt2と比較されています。結合の順序は結果セットに影響を与えません。

結果セットが同じであれば、あなたが検討しているとき、あなたは(少なくとも)次のことを考慮する必要があります。

  • は、結合キーNULLのいずれかいますか?
  • すべてのテーブルから列を選択していますか?
  • すべての結合条件に一致するものはありますか?
  • 結合が左から右に変更されましたか?
  • FROM句に括弧がありますか?

非常に似ているクエリでは、驚くほど微妙な違いがあります。

関連する問題