Maison >base de données >tutoriel mysql >Comment joindre correctement plusieurs tables en SQL avec des clés étrangères identiques ?

Comment joindre correctement plusieurs tables en SQL avec des clés étrangères identiques ?

DDD
DDDoriginal
2024-12-26 07:11:12870parcourir

How to Correctly Join Multiple Tables in SQL with Identical Foreign Keys?

Joindre plusieurs tables avec la jointure interne SQL

Lorsque vous travaillez avec plusieurs tables dans une base de données, il est souvent nécessaire de les joindre pour récupérer les données associées . Un type de jointure est appelé jointure interne, qui récupère uniquement les lignes correspondant aux critères spécifiés.

Pour joindre plusieurs tables, vous pouvez utiliser la syntaxe suivante :

SELECT *
FROM table1
INNER JOIN table2 ON table1.column1 = table2.column2
INNER JOIN table3 ON table1.column1 = table3.column3

Dans cet exemple , la table table1 est jointe à la table table2 à l'aide de la colonne column1, puis à la table table3 à l'aide de la colonne column1 à nouveau. Cela garantit que seules les lignes qui correspondent aux critères spécifiés dans les trois tables sont renvoyées.

Cependant, vous pouvez rencontrer un problème lorsque vous essayez de joindre plusieurs tables avec les mêmes clés étrangères. Par exemple, supposons que vous ayez le schéma suivant :

table1: id, name
table2: id, table1Id
table3: id, table1Id

Vous pouvez joindre les deux premières tables avec la requête suivante :

SELECT * FROM `table1` INNER JOIN `table2` ON table1.id=table2.table1Id

Maintenant, vous souhaitez joindre la troisième table dans la requête. Vous pouvez essayer ce qui suit :

SELECT * FROM `table1` 
INNER JOIN `table2` 
INNER JOIN table3 
ON table1.id=table2.table1Id=table3.table1Id

Cependant, cette requête ne renverra aucun résultat. La raison en est que la colonne table1.id est comparée à la fois à table2.table1Id et à table3.table1Id. Pour résoudre ce problème, vous devez vous assurer que chaque table est jointe à l'aide de sa propre colonne de clé étrangère unique. La requête correcte serait :

SELECT * 
FROM table1 
INNER JOIN table2
      ON table1.id=table2.table1Id
INNER JOIN table3
      ON table1.id=table3.table1Id

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