私はSOから多くの投稿を読みました。where節とon節のフィルタリングの違いを理解しています。しかし、これらの例のほとんどは、RIGHTテーブルのフィルタリングです(左結合を使用する場合)。次のようなクエリがある場合:SQLフィルタleft left join before left join
select * from tableA A left join tableB B on A.ID = B.ID and A.ID = 20
戻り値は私が期待したものではありません。私はそれが最初に左のテーブルをフィルタリングし、ID = 20の行だけを取り出し、次にtableBとの左の結合を行います。もちろん
、これは技術的にやってと同じでなければなりません:
select * from tableA A left join table B on A.ID = B.ID where A.ID = 20
をしかし、私は、あなたが参加を実行する前にテーブルをフィルタリングすることができればパフォーマンスが良いだろうと思いました。誰かがこのSQLがどのように処理されているかについて私に啓発し、これを完全に理解するのに役立ちますか? (Xを選択します。* x.value = 20 TABLEA Xから)からのようにあなたがTABLEAから持って
お返事ありがとうございますが、 "idが20でない場合は、列の値はNULLです"ということを詳しく説明することができます。 tableBのIDが20でないことを意味しますか?それからtableBのすべての列はnullになりますか?これにはユースケースがありますか?または、最初のテーブルのフィルタリングは常にwhere句に移動する必要がありますか? – TFK
@TFK。 。 。私はフレーズを修正した。 –