SQL Statement (INNERJOIN?)
Tobi
- datenbank
Hallo,
ich moechte eine SQL-Abfrage durchfuehren, bei der Daten aus einer relationalen DB aus drei Tabellen ausgelesen werden sollen (Tab1: DokumentID, DokumentTitel, Tab2: KontaktID, KontaktName, Kontaktadresse, Tab3: DokumentID, KontaktID).
Es sollen also der Dokumenttitel und der (die) dazugehorige(n) Kontakt(e) ausgegeben werden....wie muss das SQL-Statement da heissen?
SELECT Tab1.DokumentTitel Tab2.KontaktName, Tab2.KontaktAdresse Tab3.DokumentID, Tab3.KontaktID FROM Tab1 INNERJOIN Tab2 on Tab1.DokumentID=Tab2.KontaktID
Hmmm...das klappt net...kann mir da jemand helfen?
Vielen Dank & Gruss
Tobi
(Tab1: DokumentID, DokumentTitel, Tab2: KontaktID, KontaktName, Kontaktadresse, Tab3: DokumentID, KontaktID).
Was ist es denn für eine Beziehung? nKontakte können nDokumente haben?
SELECT
Tab1.DokumentTitel,
Tab2.KontaktName,
Tab2.KontaktAdresse,
Tab3.DokumentID,
Tab3.KontaktID
FROM
Tab1, Tab2, Tab3
WHERE
Tab1.DokumentID=Tab3.DokumentID
AND
Tab2.KontaktID=Tab3.KontaktID
Merke: (Anzahl der Bedingungen WHERE) = (Anzahl der Tabellen) - 1
Hallo,
okay, danke habe es verstanden.....aber es ergibt sich folgendes Problem bei der Select-Abfrage:
Es werden nur diejenigen Dokumente anegzeigt, denen auch ein Kontakt zugewiesen ist. Es sollen aber auch diese Records im Ergebnis enthalten sein, die keinen Kontakt zugewiesen haben.
Wie kann ich dieses Problem loesen?
Dank & Gruss
Tobi
Hallo Tobi,
das Statement muß heißen
Select tab1.Dokumenttitel,..... from tab1 left join (tab3 inner join tab2 on tab3.kontaktid = tab2.kontaktid) on tab1.dokumentid=tab3.dokumentid
Der Left Join (gibt es so bei MS Access) liefert alle Sätze der linken Tabelle und für die Werte der gejointen Tabelle(n),die keinen Wert entsprechend der Verknüpfung haben (hier keinen Wert, der der DokumentID aus Tab1 entspricht) den Wert Null.
Gruß
Ralf
Tag,
also, Faustregel 1)
Jede Tabelle die abgefragt wird, muss im FROM-Teil vorkommen, d.h. ggf. gejoined werden (oben hastdu nur Tab1 und Tab2)
Der Befehl wird "INNER JOIN" geschrieben, nicht in einem Wort
Der ON-Befehl gibt an, welche Spalten übereinstimmen sollen (welche Schlüssel, ich gehe aber davon aus, dass KontaktID NICHT gleich DokumentID ist...)
Der Befehl dann:
SELECT Tab1.Dokumenttitel, Tab2.KontaktName, Tab2.KontaktAdresse, Tab3.DokumentID, Tab3.KontaktID
FROM Tab1 INNER JOIN Tab3 ON Tab1.DokumentID = Tab3.DokumentID
INNER JOIN Tab2 ON tab3.kontaktid = tab2.kontaktid
Viel Glück!