Problem:
Sie möchten Tabellen in mehreren Spalten zusammenführen, indem Sie in einer Tabelle einen zusammengesetzten Primärschlüssel und in einer anderen einen zusammengesetzten Fremdschlüssel verwenden.
Beispiel:
Unsere Datenbank hat drei Tabellen mit dem Namen student
, enrollment
, und payment
. Der student
Tabelle enthält Daten in den folgenden Spalten:id
(Primärschlüssel), first_name
, und last_name
.
id | Vorname | Nachname |
---|---|---|
1 | Ellie | Willson |
2 | Tom | Braun |
3 | Sandra | Müller |
Die enrollment
Tabelle enthält Daten in den folgenden Spalten:Primärschlüssel (student_id
und course_code
), is_active
und start_date
.
student_id | kurs_code | ist_aktiv | Startdatum |
---|---|---|---|
1 | GD03 | wahr | 2020-01-20 |
1 | AP01 | falsch | 2020-03-10 |
2 | SL01 | wahr | 2020-05-05 |
3 | SL01 | wahr | 01.06.2020 |
Die payment
Tabelle enthält Daten in den folgenden Spalten:Fremdschlüssel (student_id
und course_code
, die Primärschlüssel der enrollment
Tabelle), status
und amount
.
student_id | kurs_code | Status | Betrag |
---|---|---|---|
1 | GD03 | bezahlt | 230 |
1 | AP01 | ausstehend | 100 |
2 | SL01 | ausstehend | 80 |
3 | SL01 | ausstehend | 110 |
Lassen Sie uns den Namen jedes Schülers, den Kurscode sowie den Zahlungsstatus und -betrag anzeigen.
Lösung:
SELECT s.last_name, s.first_name, p.course_code, p.status, p.amount FROM enrollment e JOIN student s ON s.id=e.student_id JOIN payment p ON p.course_code=e.course_code AND p.student_id=e.student_id;
Nachname | Vorname | kurs_code | Status | Betrag |
---|---|---|---|---|
Willson | Ellie | GD03 | bezahlt | 230 |
Willson | Ellie | AP01 | ausstehend | 100 |
Braun | Tom | SL01 | ausstehend | 80 |
Müller | Sandra | SL01 | ausstehend | 110 |
Diskussion:
Wenn Sie Daten abrufen möchten, die in Tabellen gespeichert sind, die durch einen zusammengesetzten Schlüssel verbunden sind, der in einer Tabelle ein Primärschlüssel und in einer anderen Tabelle ein Fremdschlüssel ist, verwenden Sie einfach eine Join-Bedingung für mehrere Spalten.
In einer verbundenen Tabelle (in unserem Beispiel enrollment
), haben wir einen Primärschlüssel, der aus zwei Spalten aufgebaut ist (student_id
und course_code
). In der zweiten Tabelle (payment
), haben wir Spalten, die ein zusammengesetzter Fremdschlüssel sind (student_id
und course_code
). Wie können wir die Tabellen mit diesen zusammengesetzten Schlüsseln verknüpfen?
Leicht! Wir müssen nur einen JOIN
verwenden Klausel mit mehr als einer Bedingung, indem Sie den UND-Operator nach der ersten Bedingung verwenden. In unserem Beispiel verwenden wir diese Bedingung:
p.course_code=e.course_code AND p.student_id=e.student_id
Im ersten Teil verwenden wir die student_id
Spalte aus der enrollment
Tabelle und student_id
aus der payment
Tisch. In der nächsten Bedingung erhalten wir den course_code
Spalte aus der enrollment
Tabelle und course_code
aus der payment
Tabelle.
Beachten Sie, dass die student_id
und course_code
Spalten bilden einen Primärschlüssel im enrollment
Tisch. Daher werden sie in der payment
Tabelle als Fremdschlüssel.