Database
 sql >> Datenbank >  >> RDS >> Database

So treten Sie mehreren Spalten bei

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.