Mysql
 sql >> Base de données >  >> RDS >> Mysql

Clause WHERE suivie de JOIN

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'