Mysql
 sql >> Database >  >> RDS >> Mysql

Clausola WHERE seguita da JOIN

Penso che tu confonda la sintassi di SQL per il flusso di esecuzione eseguito dal motore RDBMS:questa query

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'

sarà ottimizzato per eseguire un join solo alle righe di big filtrato dal foo='bar' condizione, non sull'intero big , da qualsiasi Query Optimizer che valga la pena, nonostante il WHERE La clausola appare testualmente dopo il JOIN .

Potresti voler riscrivere questo senza un SELECT interno così:

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'