Vous devez faire attention lorsque vous comparez des jointures avec différentes commandes join
. Si les jointures sont toutes des jointures internes, l'ordre n'a pas d'importance. Vous exemples ont des jointures externes.
de jointure interne t1 t2 sur t1.id = t2.id gauche rejoindre t4 sur t2.id = t4.id gauche rejoindre t3 sur t2.id = t3.id
from t1 inner join
t2
on t1.id = t2.id left join
t3
on t2.id = t3.id left join
t4
on t2.id = t4.id
Dans ce cas, les conditions pour les deux jointures sont indépendantes les unes des autres. Autrement dit, t3
et t4
sont seulement comparés à t2
qui se produit plus tôt. L'ordre des jointures ne va pas faire la différence dans le jeu de résultats.
Lorsque vous envisagez si le jeu de résultat est le même, vous devez considérer les points suivants (au moins):
- Est-ce que des clés de jointure
NULL
?
- Les colonnes sont-elles sélectionnées dans toutes les tables?
- Y a-t-il des correspondances pour toutes les conditions de jointure?
- Les jointures ont-elles changé de gauche à droite?
- Y a-t-il des parenthèses dans la clause
FROM
?
Il peut y avoir des différences surprenantes (mais subtiles) pour les requêtes qui semblent très similaires.
quel est votre problème? –
S'il vous plaît revoir votre question – Len
Vous obtiendrez les mêmes lignes. Mais vous n'avez pas spécifié de clause ORDER BY, le moteur peut donc ordonner ces lignes différemment. – Frazz