27

次の3つの方法で参加する場合

select t1.* from t1
left join t2 on t1.fk = t2.pk
join t3 on t2.fk = t3.pk

t2とt3の間の結合が失敗した場合、t1とt2の間の結合が成功した行が返されますか?操作の順序が左から右の場合はそうではないと思いますが、右から左に評価すると(t3が最初にt2に結合される)、前者が失敗した場合でもt1が返されます。

それはどのように機能しますか?

4

1 に答える 1

51

ON句の配置は、評価の論理的な順序を制御します。

だから最初にt1 LEFT JOIN t2 ON t1.fk = t2.pk起こります。この結合の結果は、からのすべての一致する行を含む仮想テーブルでt1, t2あり、(左外部結合であるため)一致しないt1行も列のnull値で保持されt2ます。

次に、この仮想テーブルは次の結合に参加します。JOIN t3 ON t2.fk = t3.pk

t2の行と一致しないレコードは、t1最初のステージから出力された仮想テーブルの一部ではないため、最終結果には表示されません。さらに、この内部結合をオンにすると、すべてを効果的に内部結合に戻すという価値t2.fk = t3.pkが失われます。NULLt2.fk

論理クエリ処理は、ItzikBenGanによってここでよく説明されています

于 2012-09-29T20:04:16.940 に答える