Problem:
Sie möchten Daten aus mehr als zwei Tabellen mit nur einer SELECT-Anweisung kombinieren.
Beispiel:
In unserer Datenbank gibt es vier Tabellen:student , teacher , subject , und learning .
Der student Tabelle enthält Daten in den folgenden Spalten:id , first_name , und last_name .
| id | Vorname | Nachname |
|---|---|---|
| 1 | Tom | Müller |
| 2 | Johannes | Frühling |
| 3 | Lisa | Williams |
| 4 | Ellie | Barker |
| 5 | James | Moore |
Der teacher Tabelle enthält Daten in den folgenden Spalten:id , first_name , last_name , und subject .
| id | Vorname | Nachname |
|---|---|---|
| 1 | Mailand | Smith |
| 2 | Karl | Davis |
| 3 | Markieren | Moore |
Das subject Tabelle enthält Daten in den folgenden Spalten:id und name .
| id | Name |
|---|---|
| 1 | Englisch |
| 2 | Kunst |
| 3 | Musik |
Schließlich das learning Tabelle enthält Daten in den folgenden Spalten:id , mark , subject_id , student_id , und teacher_id .
| id | markieren | subject_id | student_id | Lehrer-ID |
|---|---|---|---|---|
| 1 | 4 | 1 | 2 | 1 |
| 2 | 5 | 2 | 3 | 2 |
| 3 | 4 | 3 | 1 | 3 |
| 4 | 3 | 2 | 1 | 2 |
| 5 | 2 | 3 | 5 | 3 |
| 6 | 3 | 3 | 4 | 2 |
Wir wollen wissen, welche Schüler Englisch, Musik und Kunst lernen und welche Lehrer diese Klassen unterrichten. Wählen Sie das Kursfach, den Nachnamen des Kursteilnehmers und den Nachnamen des Kursleiters aus.
Lösung:
Verwenden Sie mehrere JOIN s in Ihrer Abfrage:
SELECT l.name AS subject_name, t.last_name AS student_last_name, st.last_name AS teacher_last_name FROM learning AS l JOIN subject s ON l.subject_id=s.id JOIN student st ON l.student_id=st.id JOIN teacher t ON l.teacher_id=t.id;
Diese Abfrage gibt Datensätze mit dem Namen des Kursfachs und den Nachnamen der Schüler und Lehrer zurück:
| subject_name | s_nachname | t_nachname |
|---|---|---|
| Musik | Moore | Müller |
| Kunst | Davis | Müller |
| Englisch | Smith | Frühling |
| Kunst | Davis | Williams |
| Musik | Davis | Barker |
| Musik | Moore | Moore |
Diese Daten stammen aus drei Tabellen, also müssen wir alle diese Tabellen zusammenführen, um die gesuchten Informationen zu erhalten.
Diskussion:
Wenn Sie Daten kombinieren möchten, die in mehreren (mehr als zwei) Tabellen gespeichert sind, sollten Sie den JOIN verwenden Betreiber mehrfach. Zuerst verbinden Sie wie gewohnt zwei Tabellen (mit JOIN , LEFT JOIN , RIGHT JOIN , oder FULL JOIN , wie angemessen). Der JOIN Der Vorgang erstellt eine „virtuelle Tabelle“, die kombinierte Daten aus den beiden Tabellen speichert. In unserem Beispiel ist die Ergebnistabelle eine Kombination aus learning und subject Tabellen.
Der nächste Schritt besteht darin, diese Ergebnistabelle mit der dritten Tabelle (in unserem Beispiel student ). Dies ist wie ein normales JOIN :Sie treten dem „virtuellen Tisch“ und dem dritten Tisch mit einer entsprechenden Bedingung bei. Diese Bedingung sollte generell eine oder mehrere Spalten aus der Zusatztabelle (student ) und eine oder mehrere Spalten aus der „virtuellen Tabelle“. In unserem Beispiel verweisen wir auf student Tabelle in der zweiten JOIN-Bedingung.
An diesem Punkt haben wir eine neue virtuelle Tabelle mit Daten aus drei Tabellen. Der letzte Schritt besteht darin, Daten aus der vierten Tabelle hinzuzufügen (in unserem Beispiel teacher ). und treten Sie mit dem Schlüssel aus diesen Tabellen bei (in unserem Beispiel id vom teacher Tabelle und teacher_id aus dem learning Tabelle).
Wenn Sie an einem anderen Tisch teilnehmen müssen, können Sie einen anderen JOIN verwenden Operator mit einer entsprechenden Bedingung in der ON-Klausel. Theoretisch können Sie an so vielen Tischen teilnehmen, wie Sie möchten.