Rejoindre deux fois la même table : une exploration complète
Dans cette discussion, nous abordons un dilemme courant auquel sont confrontés les développeurs : rejoindre efficacement la même table table plusieurs fois. Le défi réside dans l'obtention d'un ensemble de résultats incluant les données des deux conditions de jointure.
Considérez la structure de table suivante :
*Table1* ID PhoneNumber1 PhoneNumber2 *Table2* PhoneNumber SomeOtherField
L'objectif est de récupérer PhoneNumber1, SomeOtherField correspondant à PhoneNumber1, PhoneNumber2. , et SomeOtherField correspondant à PhoneNumber2.
Méthode 1 : tables multiples Rejointures
Cette approche consiste à se joindre deux fois sur la table :
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 méthode est fiable mais semble légèrement verbeuse.
Méthode 2 : OU -Based Joining
Pour tenter de simplifier la requête, le développeur suggère d'utiliser une clause OR dans le ON condition :
SELECT ... FROM Table1 INNER JOIN Table2 ON Table1.PhoneNumber1 = Table2.PhoneNumber OR Table1.PhoneNumber2 = Table2.PhoneNumber
Cependant, cette approche n'est pas valide en SQL et entraînera une erreur.
Bonnes pratiques
Dans ce scénario , La méthode 1 est recommandée en raison de sa clarté et de sa fiabilité. Il est important de noter qu’il est fortement recommandé de refactoriser les tableaux pour éviter d’utiliser des clés naturelles, telles que des numéros de téléphone. Les clés naturelles sont sujettes à des changements, ce qui entraîne un processus de maintenance difficile.
Lorsque vous rejoignez la même table plusieurs fois, l'alias est essentiel pour la lisibilité et la facilité de compréhension. Les alias aident à différencier plusieurs instances de la table.
Voici une version optimisée de la méthode 1 :
SELECT t.PhoneNumber1, t.PhoneNumber2, t1.SomeOtherFieldForPhone1, t2.someOtherFieldForPhone2 FROM Table1 t JOIN Table2 t1 ON t1.PhoneNumber = t.PhoneNumber1 JOIN Table2 t2 ON t2.PhoneNumber = t.PhoneNumber2
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!