Je pense que vous confondez la syntaxe de SQL avec le flux d'exécution effectué par le moteur RDBMS :cette requête
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'
sera optimisé pour effectuer une jointure uniquement sur les lignes de big
filtré par foo='bar'
condition, pas sur l'ensemble du big
, par n'importe quel optimiseur de requête qui vaut son sel, malgré le fait que le WHERE
la clause apparaît textuellement après le JOIN
.
Vous voudrez peut-être réécrire ceci sans un SELECT
intérieur comme ceci :
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'