Si tengocláusula WHERE ANTES DE INNER JOIN
SELECT * FROM Table1 t1
LEFT JOIN Table2 t1 ON t1.id = t2.id
WHERE t1.user='bob';
¿Funciona WHERE
cláusula después de las dos tablas son JOINED
?
¿Cómo lo hago para que funcione antes de JOIN?
Si tengocláusula WHERE ANTES DE INNER JOIN
SELECT * FROM Table1 t1
LEFT JOIN Table2 t1 ON t1.id = t2.id
WHERE t1.user='bob';
¿Funciona WHERE
cláusula después de las dos tablas son JOINED
?
¿Cómo lo hago para que funcione antes de JOIN?
Cambiar el WHERE
a otro JOIN
condición
LEFT JOIN Table2 t2 on t1.id = t2.id AND t1.user='bob'
que puede hacer
SELECT *
FROM Table1 t1
LEFT JOIN Table2 t2
ON t1.id=t2.id AND t1.user='bob';
La cláusula where
se ejecutará antes de la join
de modo que no se une a los registros innecesarios. Entonces su código está bien de la manera que es.
¿alguien más puede confirmarlo? – user1124535
@ user1124535 Puedo confirmarlo. Ejecute la consulta 'explain' y verá. –
Esto debería recibir más votos positivos –
En mi experiencia en una combinación de la izquierda, no puede excluir registros en la tabla 'izquierda' (t1) en la declaración ON dado que, por definición, se incluirán todos los registros t1. La sentencia where funciona, ya que se aplicará al resultado de la unión después.
No sé exactamente lo que quiere lograr, pero lo más probable es que una unión interna se adapte a sus necesidades y luego puede agregar la condición t1.user = 'bob' a la declaración ON.
Pero si Mosty Mostacho es correcto, la ubicación (WHERE vs ON) de la condición no es relevante para la velocidad de ejecución.
RIGHT JOIN era la solución:
SELECT cars.manufacturer, cars.year FROM cars
RIGHT JOIN (SELECT m.manufacturer FROM cars AS m ORDER BY m.year DESC LIMIT 3) subq
ON cars.manufacturer=subq.manufacturer
no han puesto a través de todo el rigor aún, pero parece que funciona.
Las respuestas dadas son correctas, pero vale la pena ahondar un poco más. ¿Por qué estás buscando este comportamiento? Me imagino que el optimizador de consultas manejaría el caso obvio para usted ... –