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 ?

Quel est le meilleur : plusieurs clauses JOIN ou une condition OR dans la clause ON pour les recherches de tables en double ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-07 07:24:41607parcourir

Which is Better: Multiple JOIN Clauses or an OR Condition in the ON Clause for Duplicate Table Lookups?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn