Tobi: SQL Statement (INNERJOIN?)

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

  1. (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

    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

      1. 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

  2. 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!