Les bases de données relationnelles nécessitent souvent de joindre des tables pour combiner des données provenant de diverses sources. Bien que les clés étrangères définissent généralement ces relations, ce n'est pas toujours le cas. Ce guide explique comment joindre des tables indirectement à l'aide d'une troisième table intermédiaire.
Imaginez trois tables : Forests
, Species
et Trees
. Forests
stocke les noms et emplacements des forêts ; Species
répertorie les espèces d'arbres et les types de bois ; et Trees
détaille les arbres individuels, y compris leurs espèces et la forêt qu'ils habitent.
L'objectif est de rejoindre Forests
et Species
en fonction des arbres qu'ils partagent. Cependant, il n'existe pas de lien de clé étrangère direct entre Forests
et Species
. Au lieu de cela, Trees
agit comme un pont, contenant des clés étrangères faisant référence à la fois à Forests
et à Species
.
La solution réside dans l'utilisation de la table Trees
comme lien intermédiaire. En rejoignant Forests
et Species
via Trees
, nous créons indirectement la relation souhaitée.
Cette requête SQL démontre la jointure indirecte :
<code class="language-sql">SELECT Forests.Fo_name, Species.Sp_name, Species.Sp_woodtype FROM Forests INNER JOIN Trees ON Forests.Fo_name = Trees.Tr_forest INNER JOIN Species ON Trees.Tr_species = Species.Sp_name WHERE Forests.Fo_loc = 'ARTIC' ORDER BY Forests.Fo_name, Species.Sp_name;</code>
Les étapes de cette requête :
INNER JOIN
connecte Forests
et Trees
en utilisant les noms de forêt correspondants.INNER JOIN
relie Trees
et Species
via des noms d'espèces correspondants.WHERE
filtre les résultats sur les forêts de la région « ARTIQUE ».ORDER BY
trie la sortie pour plus de lisibilité.Cette méthode joint efficacement les tables sans connexions directes par clé étrangère en utilisant une table partagée comme pont. L'identification des colonnes communes reliant les tables est cruciale pour établir cette relation indirecte, permettant des opérations de jointure complexes même sans les contraintes de clés étrangères traditionnelles.
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!