Tabellen verknüpfen, statt Daten zu wiederholen · Übung
Einem Ausleihvorgang zu seinem Mitglied folgen
Eine Ausleihzeile identifiziert Riley als Mitglied 17. Ein nützlicher Bericht sollte aber MB-017 und Riley zeigen, statt die Lesenden diese ID von Hand nachschlagen zu lassen.
Öffne report.sql. Die aktuelle Abfrage beginnt bei loans und zeigt member_id. Wir brauchen für jeden Ausleihvorgang eine Zeile aus members. Diese Werte gehören zusammen:
loans.member_id | members.id | members.member_code | members.name |
|---|---|---|---|
17 | 17 | MB-017 | Riley |
Füge diese Zeile hinter FROM loans hinzu:
INNER JOIN members ON members.id = loans.member_id
Ein Inner Join behält Zeilen, deren ON-Vergleich auf beiden Seiten einen Treffer findet. Der Vergleich verwendet die Beziehung, die du bereits deklariert hast. Er vergleicht weder die eigene ID des Ausleihvorgangs noch die Gegenstands-ID.
Ersetze dann loans.member_id in den ausgewählten Spalten durch:
members.member_code,
members.name AS member_name,
Die Tabellennamen qualifizieren jede Spalte und machen ihre Herkunft ausdrücklich sichtbar. Der Alias gibt dem zweiten name eine nützliche Ergebnisüberschrift. Behalte loans.id AS loan_id, die beiden Datumsspalten und ORDER BY loans.id bei.
Klicke auf Run. Der Abschnitt report.sql sollte so beginnen:
loan_id | member_code | member_name | checked_out_on | returned_on
501 | MB-017 | Riley | 2026-08-18 | NULL
Alle drei sichtbaren Ausleihvorgänge haben passende Mitglieder, also bleiben alle drei in diesem Inner-Join-Bericht erhalten. Submit verwendet IDs, die einander nicht zufällig ähneln, und gibt zwei Mitgliedern denselben angezeigten Namen. So entscheidet die Beziehung über das Ergebnis, nicht eine zufällig passende Zahl oder ein Name.
Diese Abfrage hat einen klaren Weg: Beginne mit einem Ausleihvorgang, ordne seine member_id der members.id zu und wähle die Mitgliederangaben aus dieser passenden Zeile aus. Jetzt kannst du auch der anderen Beziehung des Ausleihvorgangs folgen.
Aufgabe
Bearbeite report.sql so, dass jeder Ausleihvorgang mit einem INNER JOIN von loans.member_id zu members.id führt. Gib loan_id, member_code, member_name, checked_out_on und returned_on zurück, sortiert nach Ausleih-ID.