Heim >Datenbank >MySQL-Tutorial >Wie kann ich Tabellen ohne direkte Fremdschlüsselbeziehung verknüpfen?

Wie kann ich Tabellen ohne direkte Fremdschlüsselbeziehung verknüpfen?

DDD
DDDOriginal
2025-01-15 18:11:51666Durchsuche

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

Verbinden Sie Tabellen mit Fremdschlüsselbeziehungen über eine dritte Tabelle

Problembeschreibung

Daten werden häufig in mehreren Tabellen gespeichert, wobei die Beziehungen durch Fremdschlüssel definiert werden. Manchmal haben zwei Tabellen jedoch möglicherweise keine direkte Fremdschlüsselbeziehung, können aber dennoch über eine dritte Tabelle verbunden werden. Diese Frage zeigt, wie ein solcher Join durchgeführt wird, um bestimmte Informationen aus mehreren Tabellen zu extrahieren.

Lösung

Entgegen der Annahme, dass für Tabellenverknüpfungen Fremdschlüssel erforderlich sind, sind Fremdschlüssel nicht erforderlich. Stattdessen können Tabellen basierend auf für jede Tabelle definierten Prädikaten verknüpft werden.

Um Tabellen ohne direkte Fremdschlüsselbeziehungen zu verknüpfen, führen Sie die folgenden Schritte aus:

  1. Bestimmen Sie die geeignete Tabelle zum Verknüpfen basierend auf der gewünschten Ausgabe.
  2. Kombinieren Sie Tabellen mit den Operatoren CROSS JOIN oder INNER JOIN.
  3. Verwenden Sie die WHERE-Klausel, um zusätzliche Bedingungen zum Filtern der verbundenen Daten hinzuzufügen.

Ausführliche Erklärung

Aussagen und Tabellen:

Jede Tabelle verfügt über ein Prädikat, das die darin enthaltenen Zeilen definiert. Beispielsweise enthält die Tabelle Species Zeilen, in denen der Artenname der Holzart und der maximalen Höhe entspricht.

Abfrageprädikat:

-Abfragen haben auch Prädikate, die auf FROM, WHERE und anderen Klauseln basieren. Tabellenaliase ermöglichen das Umbenennen von Spalten und erleichtern Join-Bedingungen.

Tabelle verbinden:

CROSS JOIN und INNER JOIN verwenden AND, um Prädikate zu kombinieren. UNION verwendet OR, während EXCEPT AND NOT verwendet, um Prädikate zu kombinieren. Mit den Klauseln ON und WHERE können zusätzliche Join-Bedingungen angegeben werden.

Auswahltabelle:

Um die richtige Tabelle auszuwählen, berücksichtigen Sie die gewünschte Ausgabe und identifizieren Sie die Tabelle, die die erforderlichen Spalten enthält. Schließen Sie sich ihnen basierend auf dem Prädikat an, das sie teilen.

Fremdschlüssel und Abfragen:

Fremdschlüssel haben keinen Einfluss auf die Abfrageausführung. Sie erzwingen Integritätseinschränkungen, schränken Verbindungen jedoch nicht ein. Abfragen werden anhand von Tabellenprädikaten ausgewertet.

Beispielabfrage:

Um den Waldnamen, den Artennamen und die Holzart des Regionalwaldes „ARCTIC“ zu extrahieren:

<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>

Diese Abfrage verknüpft effektiv die Tabellen Tr_species, Tr_forest und Forest über die Spalten Species und Tree und filtert die Ergebnisse basierend auf der Spalte Fo_loc. Die Ausgabe ist nach Wald- und Artennamen sortiert.

Hinweis: Die Beschreibung der Beispielabfrage wurde korrigiert, um die logische Richtigkeit sicherzustellen und die drei Tabellen verbinden zu können. Die ON Tree.Tr_species=Tree.Tr_forest-Bedingung im ursprünglichen Beispiel ist falsch, da versucht wird, zwei verschiedene Spalten innerhalb einer Tabelle zu verbinden. Die korrigierte Abfrage verwendet die richtigen Join-Bedingungen.

Das obige ist der detaillierte Inhalt vonWie kann ich Tabellen ohne direkte Fremdschlüsselbeziehung verknüpfen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn