Maison >base de données >tutoriel mysql >Quel est le meilleur : plusieurs clauses JOIN ou une condition OR dans la clause ON pour les recherches de tables en double ?
Optimisation des jointures de tables pour les recherches en double
Lorsque vous joignez la même table deux fois, il existe généralement deux approches : utiliser plusieurs clauses JOIN ou incorporer une Condition OR dans la clause ON.
Clauses JOIN multiples (méthode 1):
Comme démontré dans votre exemple, cette méthode implique la création d'un JOIN distinct pour chaque condition de correspondance :
SELECT t1.PhoneNumber1, t1.PhoneNumber2, t2.SomeOtherFieldForPhone1, t3.someOtherFieldForPhone2 FROM Table1 t1 INNER JOIN Table2 t2 ON t2.PhoneNumber = t1.PhoneNumber1 INNER JOIN Table2 t3 ON t3.PhoneNumber = t1.PhoneNumber2
Cette approche est simple et garantit que les données résultantes contiennent toutes les colonnes requises.
OR Condition dans la clause ON (Méthode 2):
Cette méthode tente de simplifier la requête en combinant les conditions JOIN en une seule :
SELECT ... FROM Table1 INNER JOIN Table2 ON Table1.PhoneNumber1 = Table2.PhoneNumber OR Table1.PhoneNumber2 = Table2.PhoneNumber
Cependant, cette approche peut conduire à des lignes en double dans l'ensemble de résultats si les deux conditions de correspondance sont remplies pour une ligne donnée.
Meilleure pratique :
La méthode préférée est Méthode 1 avec plusieurs clauses JOIN. Il fournit un moyen plus explicite et plus fiable de rejoindre la table en fonction de critères spécifiques tout en évitant la duplication de données.
Éviter les jointures redondantes :
Il est important d'éviter les jointures redondantes en en utilisant des alias et des conventions de dénomination appropriés. Par exemple, la requête suivante peut être simplifiée :
SELECT t.PhoneNumber1, t.PhoneNumber2, t1.SomeOtherFieldForPhone1, t1.someOtherFieldForPhone1 FROM Table1 t JOIN Table2 t1 ON t1.PhoneNumber = t.PhoneNumber1 JOIN Table2 t2 ON t2.PhoneNumber = t.PhoneNumber2
En créant un alias pour les tables jointes (par exemple, t1 et t2), vous pouvez réduire la redondance et rendre la requête plus lisible.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!