SQLの構文をRDBMSエンジンによって実行される実行フローと間違えていると思います:このクエリ
SELECT a,b FROM big b
LEFT JOIN (SELECT b as small_b,c,d FROM small) ON big.b=small.small_b
WHERE b.foo='bar'
big
の行にのみ結合を実行するように最適化されます foo='bar'
でフィルタリング big
全体ではなく条件 、WHERE
であるにもかかわらず、その価値のあるクエリオプティマイザによって 句は、JOIN
の後にテキストで表示されます 。
内部のSELECT
なしでこれを書き直したい場合があります このように:
SELECT t1.a as big_a, t1.b as big_b, t2.b as small_b, t2.c, t2.d
FROM big t1
LEFT JOIN small t2 ON t1.b = t2.b
WHERE t1.foo='bar'