SQL Abfrage

Denfie

Mitglied
Hiho ich komm bei meiner Abfrage einfach nicht weiter.

Folgendes Problem.
Abfrage an die Datenbank soll ergeben, das Bucher die ausgeliehen sind und Bücher die noch nicht ausgeliehen sind angezeigt werden sollen. Falls sie ausgeliehen sind auch noch den Vor- und Nachnamen.

An die Namen komm ich über:
Die Tabelle Personen (PANr, Vorname, Nachname )
Die Tabelle Ausleihe beinhaltet (InventarNr, PANr)
Die Tabelle Buecher beinhaltet (ISBN, Titel, ... )
Die Tabelle Buch_Exemplar beinhaltet (ISBN, InventarNr, ... )

Über diese 4 Tabellen soll die Abfrage gehen wenn das Buch da ist und somit ja nicht verliehen soll beim Vor- und Nachnamen nix drinnen Stehen, nur der Titel, die InventarNr und die ISBN nummer sollen ausgegeben werden.

Ich hab es nun schon mit dutzenden Varienten Probiert bekomm es aber nicht hin.

Meine Abfrage die ich zuletzt geschrieben habe lautete:

Code:
SELECT buch_e.InventarNr, bue.ISBN, bue.Titel, pers.Vorname, pers.Nachname
FROM Buecher bue, Buch_Exemplar buch_e, Ausleihe ausl, Personen pers
WHERE  buch_e.ISBN = bue.ISBN 
AND buch_e.InventarNr = ausl.InventarNr(+)
ORDER BY buch_e.InventarNr
Ich hab es mit INNER JOINS, OUTER JOINS auch schon probiert aber leider bekomm es nur hin, das entweder nur die Ausgeliehenen Bücher angezeigt werden oder das alle angezeigt werden aber alle Einträge mit allen Namen aus der Tabelle Personen verknüpft werden bitte brauch das morgen für die Uni. Hab kein Bock so lange beim Prof sitzen zu müssen.

Danke schon mal im voraus
 
Bei mir ist es immer zu morgen :D
Bin weil ich hätte nicht gedacht das ich so sehr an einer SQL abfrage sitzen bleibe 9 andere sind ja fertig

Oracle 10g

Probiere es gerade noch mit If anweisungen oder unterabfragen aber das will auch nicht so wirklich
 
Mir fehlen bei deiner Abfrage JOINS. Eine Auswahl aus einem Kartesischen Produkt ist nicht nur langsam sondern hier auch absolut nicht angebracht. Wenn du einen LEFT JOIN benutzt erreichst du damit z.B. dass alle Datensätze aus der Linken Tabelle und passende aus der rechten Tabelle verwendet werden. Damit sollte es eigentlich gehen.
 
Perfekt den anstoß hab ich gebraucht... Stimmt hab den Wald mal wieder vor lauter Bäumen nicht gesehn
sql Code:
  1. SELECT buch_e.InventarNr, bue.ISBN, bue.Titel,pers.Vorname, pers.Nachname
  2. FROM Buecher bue
  3. LEFT JOIN Buch_Exemplar buch_e
  4. ON bue.ISBN = buch_e.ISBN
  5. LEFT JOIN Ausleihe ausl
  6. ON buch_e.InventarNr = ausl.InventarNr
  7. LEFT JOIN Personen pers
  8. ON ausl.PANr = pers.PANr
  9. ORDER BY buch_e.InventarNr


Das bringt das gewünschte Ergebnis.
Danke für die schnelle Hilfe
 

Neue Beiträge

Zurück