Mysql
 sql >> Datenbank >  >> RDS >> Mysql

WHERE-Klausel gefolgt von JOIN

Ich glaube, Sie verwechseln die Syntax von SQL mit dem Ausführungsablauf, der von der RDBMS-Engine ausgeführt wird:diese Abfrage

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'

wird optimiert, um einen Join nur mit den Zeilen von big durchzuführen gefiltert nach foo='bar' Zustand, nicht auf dem gesamten big , von jedem Abfrageoptimierer, der sein Geld wert ist, obwohl die WHERE -Klausel erscheint textuell nach dem JOIN .

Vielleicht möchten Sie dies ohne ein inneres SELECT umschreiben so:

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'