Rejoindre la même table deux fois : comprendre la meilleure approche
Lorsque vous travaillez avec plusieurs tables, il est courant de devoir les rejoindre sur la même colonne plusieurs fois. Ce défi se pose lorsque vous avez besoin d'informations de la même table liées à différentes colonnes d'une autre table.
Dans le scénario donné, vous disposez de deux tables avec des structures similaires, se joignant en fonction de Table1.PhoneNumber1 et Table1.PhoneNumber2. Le but est de récupérer un ensemble de résultats contenant PhoneNumber1, SomeOtherField correspondant à PhoneNumber1, PhoneNumber2 et SomeOtherField correspondant à PhoneNumber2.
Méthode 1 : Plusieurs jointures
La première méthode implique de se joindre deux fois à la même table, comme démontré ci-dessous :
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
Ceci La méthode récupère efficacement les données souhaitées, même si elle peut sembler lourde en raison de plusieurs clauses de jointure.
Méthode 2 : condition OU
La deuxième méthode tente de simplifier la requête en utilisant une condition OR dans la clause ON :
SELECT ... FROM Table1 INNER JOIN Table2 ON Table1.PhoneNumber1 = Table2.PhoneNumber OR Table1.PhoneNumber2 = Table2.PhoneNumber
Cependant, cette approche nécessite une manipulation supplémentaire et peut ne pas produire l'effet escompté résultat.
Meilleure approche
L'approche recommandée consiste à utiliser la Méthode 1, en rejoignant la table plusieurs fois avec des alias clairs pour chaque jointure. Cette méthode est fiable et garantit une récupération précise des données.
Considérations relatives à la refactorisation
Il convient de noter que l'utilisation de numéros de téléphone comme clés naturelles peut entraîner des problèmes de maintenance, car les numéros de téléphone peuvent changer fréquemment. Pensez à utiliser des clés artificielles pour maintenir l'intégrité des données.
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!