Si j'ai
SELECT * FROM Table1 t1
LEFT JOIN Table2 t2 ON t1.id = t2.id
WHERE t1.user='bob';
La clause WHERE
est-elle exécutée après les deux tables sont-elles JOINED
?
Comment puis-je le faire pour qu'il fonctionne avant le JOIN?
Remplacez la variable WHERE
par une autre condition JOIN
LEFT JOIN Table2 t2 on t1.id = t2.id AND t1.user='bob'
La clause where
sera exécutée avant la join
afin de ne pas joindre les enregistrements inutiles. Donc, votre code est bien tel qu'il est.
D'après mon expérience dans une jointure gauche, vous ne pouvez pas exclure des enregistrements de la table 'left' (t1) de l'instruction ON car, par définition, tous les enregistrements t1 seront inclus. L'instruction where fonctionne, car elle sera appliquée au résultat de la jointure par la suite.
Je ne sais pas exactement ce que vous souhaitez réaliser, mais très probablement une jointure interne convient également à vos besoins, puis vous pouvez / ajouter la condition t1.user = 'bob' à l'instruction ON.
Mais si Mosty Mostacho est correct, l'emplacement (WHERE vs ON) de la condition n'est pas pertinent pour la rapidité d'exécution.
RIGHT JOIN était la solution:
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
Je n'ai pas encore passé le cap, mais cela semble fonctionner.
tu peux faire
SELECT *
FROM Table1 t1
LEFT JOIN Table2 t2
ON t1.id=t2.id AND t1.user='bob';
Vous devriez simplement ajouter la condition t1.user='bob'
à la clause ON
avant une autre condition, qui sera évaluée en premier:
SELECT * FROM Table1 t1
LEFT JOIN Table2 t2
ON t1.user='bob' AND t1.id = t2.id;