none
2 inner Join in einer SQL Abfrage - fehlender Operator RRS feed

  • Frage

  • Hallo,

    ich beiße mir schon seit Tagen die Zunge an einer Abfrage aus. Hierbei sollen Daten aus 3 Tabellen zusammengeführt werden und ich habe es mit einem doppelten LEFT JOIN versucht. Bekomme aber immer den Fehler, dass ein Operator fehlt.

    Hier der Code:

    sql = "

    INSERT INTO [T-Ressourcen-Projektansicht] ( Ressource, [Kriterium-sonst], [Maschinen-Nr], Type, Typ, Anfang, Ende, AdressenNummer)
    SELECT DISTINCTROW " & QuelleName & ", " & QuelleKriterium & ", [T-Maschinen].[Maschinen-Nr], [T-Maschinen].[Typ], '" & Typ & "', [T-Maschinen].[Lieferzeit-Eingang], [T-Projekte].[EK-Datum-Verladung], [T-Adressen].[Adressen-Nr]
    FROM
    [T-Projekte]
    LEFT JOIN " & QuellTabelle & " ON [T-Projekte].[EK " & Feldbezeichnung & "] = [T-Adressen].[Adressen-Nr]
    LEFT JOIN [T-Maschinen] ON [T-Projekte].[Maschinen-Nr] = [T-Maschinen].[Maschinen-Nr]
    WHERE ((" & QuelleKriterium & ")>4005 And (" & QuelleKriterium & ")<4009) OR ((" & QuelleKriterium & ")>4100 And (" & QuelleKriterium & ")<4351)) AND (([T-Projekte].[EK-Datum-Verladung])>=[Forms]![F-Projekt-Ressourcen]![AktuellesDatum]-35 And ([T-Projekte].[EK-Datum-Verladung])<=[Forms]![F-Projekt-Ressourcen]![AktuellesDatum]+65));"

    Für Tips und Anregungen, wäre ich sehr dankbar!

    Montag, 16. Juni 2014 13:31

Antworten

  • Hallo,

    der SQL Syntax nach verwendest Du MS Access als Datenbank, richtig? MS Access will unbedingt die JOINs, wenn mehrere vorhanden sind, in Klammern gesetzt haben. Versuche es mal so:

    FROM
    ([T-Projekte] LEFT JOIN [T-Adressen] ON [T-Projekte].[EK Monteur 1] = [T-Adressen].[Adressen-Nr] ) LEFT JOIN [T-Maschinen] ON [T-Projekte].[Maschinen-Nr] = [T-Maschinen].[Maschinen-Nr]


    und das am besten direkt in MS Access als Abfrage zum Testen


    Olaf Helper

    [ Blog] [ Xing] [ MVP]


    • Bearbeitet Olaf HelperMVP Dienstag, 17. Juni 2014 07:22
    • Als Antwort markiert Livcasson Dienstag, 17. Juni 2014 08:07
    Dienstag, 17. Juni 2014 07:22

Alle Antworten

  • Hi,

    poste bitte mal den Inhalt der Variable "sql" nach Ausführung der o.g. Zeile.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Montag, 16. Juni 2014 14:08
    Moderator
  • Hi,

    mit den Variablen sieht der Code so aus:

    sql = "

    INSERT INTO [T-Ressourcen-Projektansicht] ( Ressource, [Kriterium-sonst], [Maschinen-Nr], Type, Typ, Anfang, Ende, AdressenNummer)

    SELECT DISTINCTROW [T-Adressen].Kurzname, [T-Adressen].KriteriumSonstige, [T-Maschinen].[Maschinen-Nr], [T-Maschinen].[Typ], 'Demontage', [T-Maschinen].[Lieferzeit-Eingang], [T-Projekte].[EK-Datum-Verladung], [T-Adressen].[Adressen-Nr]

    FROM  [T-Projekte]

    LEFT JOIN [T-Adressen] ON [T-Projekte].[EK Monteur 1] = [T-Adressen].[Adressen-Nr]

    LEFT JOIN [T-Maschinen] ON [T-Projekte].[Maschinen-Nr] = [T-Maschinen].[Maschinen-Nr]

    WHERE (([T-Adressen].KriteriumSonstige)>4005 And ([T-Adressen].KriteriumSonstige)<4009) OR (([T-Adressen].KriteriumSonstige)>4100 And ([T-Adressen].KriteriumSonstige)<4351)) AND (([T-Projekte].[EK-Datum-Verladung])>=[Forms]![F-Projekt-Ressourcen]![AktuellesDatum]-35 And ([T-Projekte].[EK-Datum-Verladung])<=[Forms]![F-Projekt-Ressourcen]![AktuellesDatum]+65));"

    Dienstag, 17. Juni 2014 06:51
  • Hallo,

    der SQL Syntax nach verwendest Du MS Access als Datenbank, richtig? MS Access will unbedingt die JOINs, wenn mehrere vorhanden sind, in Klammern gesetzt haben. Versuche es mal so:

    FROM
    ([T-Projekte] LEFT JOIN [T-Adressen] ON [T-Projekte].[EK Monteur 1] = [T-Adressen].[Adressen-Nr] ) LEFT JOIN [T-Maschinen] ON [T-Projekte].[Maschinen-Nr] = [T-Maschinen].[Maschinen-Nr]


    und das am besten direkt in MS Access als Abfrage zum Testen


    Olaf Helper

    [ Blog] [ Xing] [ MVP]


    • Bearbeitet Olaf HelperMVP Dienstag, 17. Juni 2014 07:22
    • Als Antwort markiert Livcasson Dienstag, 17. Juni 2014 08:07
    Dienstag, 17. Juni 2014 07:22
  • Vielen Dank!! Das war der entscheidende Tip.
    Dienstag, 17. Juni 2014 08:05
  • Am besten "klickst" Du in MS Access im Designer die Abfrage zusammen, dann hast Du die richtige Syntax.

    Wenn es mehr als nur 2 JOINs sind, muss "von oben nach unten" geschachtelt geklammert werden, das sieht von der Struktur her so aus:

    FROM (((tbl1 JOIN tbl2 ON ...) JOIN tbl3 ON ...) JOIN tbl4 ON ...) JOIN tbl5 ON ...


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Dienstag, 17. Juni 2014 08:43