sql >> Base de Datos >  >> RDS >> Mysql

Cláusula WHERE seguida de JOIN

Creo que confunde la sintaxis de SQL con el flujo de ejecución realizado por el motor RDBMS:esta consulta

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'

se optimizará para realizar una combinación solo en las filas de big filtrado por el foo='bar' condición, no en todo el big , por cualquier optimizador de consultas que se precie, a pesar de que el WHERE la cláusula aparece textualmente después de JOIN .

Es posible que desee volver a escribir esto sin un SELECT interno así:

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'