![]() |
Datenbank: SQLite • Version: 3 • Zugriff über: SQLite4Delphi Wrapper von Tim Anderson
FOREIGN KEY ausgeben?
Hallo,
ich hab ein Problem mit der Foreign Key Ausgabe, bzw. mit der Ausgabe die hinter einem FK steht. Also ich hab drei Tabellen: Zitat:
Nun meine Frage wie ich in der Tabelle Ausleihe den Titel des Buches und den Namen des Entliehers ausgebe? Mir gelingt die SELECT-Abfrage nicht. Vor allem wenn ein Buch nicht entliehen wurde und der Name des Entlieher leer sein muss. Bin für jede Hilfe dankbar! |
AW: FOREIGN KEY ausgeben?
Ich nehme an, SQLite beherrscht JOINs?
SQL-Code:
[edit] Diese Abfrage nutzt INNER JOINs, d.h. Du bekommst nur Datensätze geliefert, die in allen 3 Tabellen Entsprechungen aufweisen. Ersetzt Du JOIN durch LEFT JOIN, dann bekommst Du alle Bücher. Gibt es keinen Entleiher, wird dieser mit NULL zurückgegeben. [/edit]
SELECT
B.Titel, L.Name, L.Vorname FROM Buch B JOIN Ausleihe A ON A.BuchID = B.ID JOIN Leser L ON L.ID = A.LeserID ORDER BY B.Titel, L.Name, L.Vorname |
AW: FOREIGN KEY ausgeben?
Die PK Felder würde ich immer einfach als ID angeben:
Buch( ID, Titel, Autor ) Leser( ID, Name, Vorname ) Ausleihe( Buch_ID, Leser_ID, Ausleihdatum, Rückgabedatum ) Warum, dazu gleich mehr. Warum sollte in der Tabelle Ausleihe ein Eintrag vorhanden sein, wenn das Buch nicht ausgeliehen ist? Hier mal die Abfrage über alle Bücher, und wenn ausgeliehen, dann mit den Leser-Informationen:
Code:
und jetzt stellt man fest, dass man das sehr schön lesen kann (Buch.ID statt Buch.BuchID - da fängt man ja zu stottern an)
SELECT Buch.ID, Buch.Titel, Buch.Autor, Ausleihe.Ausleihedatum, Ausleihe.Rückgabedatum, Leser.Name, Leser.Vorname
FROM Buch LEFT JOIN Ausleihe ON Ausleihe.Buch_ID = Buch.ID LEFT JOIN Leser ON Ausleihe.Leser_ID = Leser.ID |
AW: FOREIGN KEY ausgeben?
Ist mir irgendwie schwer zu verstehen, darf ich vllt ein anderes Beispiel zeigen (mit zwei Tabellen), das bisschen einfacher ist, wie ich sehe muss wohl klein anfangen.
Buch(ID, FK_Leser_ID, Titel, Autor) Leser(ID, Name, Vorname) Nun möchte ich alle Bücher anzeigen, und wenn entliehen dann mit den Namen der Leser. Danke noch mal! |
AW: FOREIGN KEY ausgeben?
In den beiden Tabellen gibt es aber keine Info, ob das Buch entliehen ist.
|
AW: FOREIGN KEY ausgeben?
SQL-Code:
select
b.ID, b.Titel, b.Autor, IfNull( '', l.Name || l.vorname) as Leiher from buecher b left join Leser l on l.Id = b.LeserID; |
AW: FOREIGN KEY ausgeben?
Zitat:
|
AW: FOREIGN KEY ausgeben?
Sagen wir mal so, in deinem Fall wird ja nur hinterlegt, wer das Buch gerade ausgeliehen hat. Es gibt keine Historie.
|
AW: FOREIGN KEY ausgeben?
Zitat:
|
AW: FOREIGN KEY ausgeben?
Sobald das Buch zurückgegeben wird, weiss man nicht mehr, ob es schon einmal verliehen war. Bei der 1. Lösung ist das Problemlos möglich.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz