Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Cláusula WHERE seguida de JOIN


Acho que você confunde a sintaxe do SQL com o fluxo de execução realizado pelo mecanismo 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'

será otimizado para realizar uma junção apenas nas linhas de big filtrado pelo foo='bar' condição, não em todo o big , por qualquer otimizador de consulta que valha a pena, apesar do fato de que o WHERE cláusula aparece textualmente após o JOIN .

Você pode querer reescrever isso sem um SELECT interno assim:
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'