0%

Verbind tabellen in plaats van gegevens te herhalen · oefening

Lees één uitlening uit drie tabellen

De join met leden beantwoordt wie iets heeft geleend, maar het rapport zegt nog steeds niet wat diegene heeft geleend. De uitlening heeft het tweede pad dat we nodig hebben al: loans.item_id verwijst naar items.id.

Open report.sql en laat de join met leden ongewijzigd. Voeg eronder een tweede join toe:

INNER JOIN items ON items.id = loans.item_id

Deze twee ON-vergelijkingen zijn onafhankelijk. De ene volgt member_id naar de ledentabel. De andere volgt item_id naar de voorwerptabel. Als je de ledenvergelijking voor beide tabellen zou hergebruiken, zou je het verkeerde record of helemaal geen record krijgen.

Voeg de code en naam van het voorwerp toe tussen de ledenkolommen en de datums:

items.asset_tag,
items.name AS item_name,

Zowel items als members heeft een kolom met de naam name, dus kwalificatie is hier van belang. members.name AS member_name en items.name AS item_name vertellen SQLite welke waarde het moet lezen en geven het resultaat twee ondubbelzinnige koppen.

Druk op Run en volg de eerste regel:

501 | MB-017 | Riley | IT-100 | Cordless drill | 2026-08-18 | NULL

Uitlening 501 vormt het middelpunt van die rij. Het lid-ID vindt Riley. Het voorwerp-ID vindt de accuboormachine. De uitleen- en retourwaarden blijven gegevens van de uitlening zelf.

Dit is nog steeds één resultaatrij per uitlening, geen nieuwe gecombineerde tabel die in de database is opgeslagen. De query volgt tijdens het uitvoeren relaties en geeft het geselecteerde overzicht terug. Als een gegeven van een lid of voorwerp later verandert, verandert het volgende rapport mee zonder historische uitleenrijen te herschrijven.

Submit gebruikt numerieke ID’s zonder onderling verband en herhaalde getoonde namen. Een correct rapport moet beide ID-vergelijkingen volgen, precies de zeven beschreven kolommen teruggeven en ORDER BY loans.id behouden. Je kent het joinpatroon al; deze oefening vraagt je twee paden tegelijk uit elkaar te houden.

Opdracht

Breid report.sql uit met een tweede inner join van loans.item_id naar items.id. Voeg asset_tag en item_name toe zodat het resultaat de zeven koppen hierboven heeft, geordend op uitleen-ID.