Maison > base de données > tutoriel mysql > Comment puis-je joindre efficacement la même table deux fois dans SQL pour récupérer des données à partir de plusieurs conditions de jointure ?

Comment puis-je joindre efficacement la même table deux fois dans SQL pour récupérer des données à partir de plusieurs conditions de jointure ?

Patricia Arquette
Libérer: 2025-01-07 07:32:40
original
912 Les gens l'ont consulté

How Can I Efficiently Join the Same Table Twice in SQL to Retrieve Data from Multiple Join Conditions?

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal