Entwickler-Ecke

Datenbanken - Joins mehrerer Tabellen


Stinger47 - Di 19.06.07 12:08
Titel: Joins mehrerer Tabellen
Hi erstmal...sry hab aber auch shcon suchenfunktion gefunden hat mir aber leider auch nicht so wirklich weitergeholfen...
entweder der code ist richtig und da ist nur ein fehler vorhanden den ich nicht finde oder der code ist falsch....^^

so wir schreiben im informatik kurs meiner schule gerade ein bücherei programm zum ausleihen einziehen und verwalten sämtlicher bücher in der schule...
folgende tabellen sind nun ersteinmal wichtig:

BIB_BOOK //Informationen über das buch (titel ausleiher etc)
BIB_PUPIL //Schülerinformationen
BIB_STATUS //Buchstatus; Asugeliehen oder nicht; Verknüpft mit BIB_BOOK(BUCH_ID)
und BIB_PUPIL(Schüler_ID)

so aus der buchtabelle soll nun ein buch ausgelesen werden und zwar der buchtitel und die buchnummer(BUCH_ID)
dann soll aus den Informationen des BUches der Ausleiher ermittelt werden...es muss also die BUCH_ID gespeichert werden und dann in der tabelle BIB_STATUS überprüft werden welcher schüler dieser BUCH_ID zugeordnet ist.
So mit der Schüler_ID soll nun in der BIB_PUPIL Tabelle der dazugehörige Schüler gefunden werden und der Vor- und Nachname angezeigt werden...
bis jetzt sah das so aus....^^



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
with Q do           // auslesen von schüler bei büchern
    begin
      DatabaseName := FDB.DatabaseName;
      Active       := False;
      with SQL do  // auslesen von vor- und nachname, sowie klasse
      begin
        Clear;
        Add('SELECT bib_pupil.vorname, bib_pupil.nachname');
            Add('FROM(BIB_BOOK INNER JOIN BIB_STATUS on BIB_BOOK.[BID] = BIB_STATUS.[BID]
                INNER JOIN BIB_PUPIL on BIB_PUPIL.[SID] = BIB_STATUS.[SID]'
);
      end;
       Open;
      while Eof=FALSE do
      begin
        vornamebuch.Add(FieldByName('Vorname').AsString);
        nachnamebuch.add(FieldByName('nachname').asstring);
        Next;
      end;
     end;


danke schonmal...:)


ene - Di 19.06.07 13:32

Hi,

sollte doch so etwas reichen:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
SELECT 
  Buch.Titel, 
  Schueler.Nachname
FROM 
  Buch INNER JOIN 
    (Schueler INNER JOIN 
      Buchstatus ON Schueler.SchuelerID = Buchstatus.SchuelerID) 
    ON Buch.BuchID = Buchstatus.BuchID
WHERE
  Buch.Titel = 'abc'