Maison > base de données > tutoriel mysql > Comment puis-je joindre des tables sans relation de clé étrangère directe ?

Comment puis-je joindre des tables sans relation de clé étrangère directe ?

DDD
Libérer: 2025-01-15 18:11:51
original
666 Les gens l'ont consulté

How Can I Join Tables Without a Direct Foreign Key Relationship?

Rejoignez des tables avec des relations de clé étrangère via une troisième table

Description du problème

Les données sont souvent stockées dans plusieurs tables, avec des relations définies par des clés étrangères. Cependant, il arrive parfois que deux tables n'aient pas de relation de clé étrangère directe, mais elles peuvent quand même être jointes via une troisième table. Cette question montre comment effectuer une telle jointure pour extraire des informations spécifiques de plusieurs tables.

Solution

Contrairement à l'hypothèse selon laquelle les clés étrangères sont requises pour les jointures de tables, les clés étrangères ne sont pas requises. Au lieu de cela, les tables peuvent être jointes en fonction des prédicats définis pour chaque table.

Pour rejoindre des tables dépourvues de relations de clé étrangère directes, procédez comme suit :

  1. Déterminez la table appropriée à rejoindre en fonction du résultat souhaité.
  2. Combinez des tables à l'aide des opérateurs CROSS JOIN ou INNER JOIN.
  3. Utilisez la clause WHERE pour ajouter des conditions supplémentaires pour filtrer les données connectées.

Explication détaillée

Déclarations et tableaux :

Chaque table possède un prédicat qui définit les lignes qu'elle contient. Par exemple, le tableau Species contient des lignes où le nom de l'essence correspond à son essence de bois et à sa hauteur maximale.

Prédicat de requête :

Les requêtes

ont également des prédicats basés sur FROM, WHERE et d'autres clauses. Les alias de table permettent de renommer les colonnes et facilitent les conditions de jointure.

Rejoindre la table :

CROSS JOIN et INNER JOIN utilisent AND pour combiner des prédicats. UNION utilise OR, tandis que EXCEPT utilise AND NOT pour combiner des prédicats. Les clauses ON et WHERE peuvent être utilisées pour spécifier des conditions de jointure supplémentaires.

Tableau de sélection :

Pour choisir le bon tableau, considérez le résultat souhaité et identifiez le tableau qui contient les colonnes nécessaires. Rejoignez-les en fonction du prédicat qu'ils partagent.

Clés et requêtes étrangères :

Les clés étrangères n'affectent pas l'exécution des requêtes. Ils appliquent des contraintes d'intégrité mais ne restreignent pas les connexions. Les requêtes sont évaluées par rapport aux prédicats de table.

Exemple de requête :

Pour extraire le nom de la forêt, le nom de l'espèce et le type de bois de la forêt régionale « ARCTIQUE » :

<code class="language-sql">SELECT Forest.Fo_name, Species.Sp_name, Species.Sp_woodtype
FROM Forest
INNER JOIN Tree ON Forest.Fo_name = Tree.Tr_forest
INNER JOIN Species ON Tree.Tr_species = Species.Sp_name
WHERE Forest.Fo_loc='ARCTIC'
ORDER BY Forest.Fo_name, Species.Sp_name;</code>
Copier après la connexion

Cette requête rejoint efficacement les tables Tr_species, Tr_forest et Forest via les colonnes Species et Tree et filtre les résultats en fonction de la colonne Fo_loc. La sortie est triée par nom de forêt et d’espèce.

Remarque : L'exemple de requête a été corrigé à partir de la description pour garantir l'exactitude logique et pouvoir joindre les trois tables. La condition ON Tree.Tr_species=Tree.Tr_forest dans l'exemple d'origine est fausse car elle tente de joindre deux colonnes différentes dans une table. La requête corrigée utilise les conditions de jointure correctes.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal