Tabellen verknüpfen, statt Daten zu wiederholen · Übung
Einen Ausleihvorgang über drei Tabellen lesen
Der Mitglieder-Join beantwortet, wer etwas ausgeliehen hat, aber der Bericht sagt weiterhin nicht, was ausgeliehen wurde. Der Ausleihvorgang hat bereits den zweiten Weg, den wir brauchen: loans.item_id verweist auf items.id.
Öffne report.sql und behalte den Mitglieder-Join unverändert bei. Füge darunter einen zweiten Join hinzu:
INNER JOIN items ON items.id = loans.item_id
Diese beiden ON-Vergleiche sind unabhängig. Einer folgt member_id zur Mitgliedertabelle, der andere item_id zur Gegenstandstabelle. Den Mitgliedervergleich für beide Tabellen wiederzuverwenden würde entweder den falschen Datensatz oder überhaupt keinen erzeugen.
Füge Kennzeichen und Namen des Gegenstands zwischen den Mitgliederspalten und den Datumswerten hinzu:
items.asset_tag,
items.name AS item_name,
Sowohl items als auch members haben eine Spalte namens name, also ist die Qualifizierung hier wichtig. members.name AS member_name und items.name AS item_name sagen SQLite, welchen Wert es lesen soll, und geben dem Ergebnis zwei eindeutige Überschriften.
Klicke auf Run und verfolge die erste Zeile:
501 | MB-017 | Riley | IT-100 | Cordless drill | 2026-08-18 | NULL
Ausleihvorgang 501 liefert den Mittelpunkt dieser Zeile. Seine Mitglieds-ID findet Riley. Seine Gegenstands-ID findet den Akkubohrer. Ausleih- und Rückgabeangaben bleiben Angaben aus dem Ausleihvorgang selbst.
Das ist weiterhin eine Ergebniszeile pro Ausleihvorgang, keine neue kombinierte Tabelle, die in der Datenbank gespeichert wird. Die Abfrage folgt den Beziehungen während ihrer Ausführung und gibt die ausgewählte Ansicht zurück. Würde später eine Mitglieder- oder Gegenstandsangabe geändert, änderte sich der nächste Bericht, ohne historische Ausleihzeilen umzuschreiben.
Submit verwendet nicht zusammenhängende numerische IDs und wiederholte angezeigte Namen. Ein korrekter Bericht muss beiden ID-Vergleichen folgen, genau die sieben dokumentierten Spalten zurückgeben und ORDER BY loans.id beibehalten. Du kennst das Join-Muster bereits. Diese Übung verlangt, zwei Wege gleichzeitig sauber auseinanderzuhalten.
Aufgabe
Erweitere report.sql um einen zweiten Inner Join von loans.item_id zu items.id. Füge asset_tag und item_name hinzu, sodass das Ergebnis die sieben oben gezeigten Überschriften hat, sortiert nach Ausleih-ID.