SQL Left Joins in Access

A

AppZ

Gast
Heyho,

ich habe ein Problem mit Access. Ich habe eine Abfrage welche eine Liste ausgibt, abhängig davon welche Auswahl im Formular geewählt wurde. Momentan gibt es 2 Felder die abgefragt werden: Auswahl_adresse und Auswahl_anrede. Diese Abfrage funktioniert ohne Probleme und liefert die korrekten Ergebnisse. Der Teil mit den Joins sieht wie folgt aus:

Code:
FROM
(tbl_mitglieder_stamm

LEFT JOIN tbl_mitglieder_adresse
ON ([Formulare]![frm_kontakte_versandlisten]![auswahl_adresse]="Korrespondenz" AND tbl_mitglieder_stamm.[korrespondenz_adresse]=tbl_mitglieder_adresse.adresse_id)
OR  ([Formulare]![frm_kontakte_versandlisten]![auswahl_adresse]="Rechnungen" AND tbl_mitglieder_stamm.[rechnungen_adresse]=tbl_mitglieder_adresse.adresse_id)
OR ([Formulare]![frm_kontakte_versandlisten]![auswahl_adresse]="IRW/Privat" AND tbl_mitglieder_stamm.[irw_adresse]=tbl_mitglieder_adresse.adresse_id))

LEFT JOIN tbl_mitglieder_anrede
ON ([Formulare]![frm_kontakte_versandlisten]![auswahl_anrede]="Korrespondenz" AND tbl_mitglieder_stamm.[korrespondenz_anrede]=tbl_mitglieder_anrede.anrede_id)
OR ([Formulare]![frm_kontakte_versandlisten]![auswahl_anrede]="Rechnungen" AND tbl_mitglieder_stamm.[rechnungen_anrede]=tbl_mitglieder_anrede.anrede_id)
OR ([Formulare]![frm_kontakte_versandlisten]![auswahl_anrede]="IRW/Privat" AND tbl_mitglieder_stamm.[irw_anrede]=tbl_mitglieder_anrede.anrede_id)

Jetzt möchte ich eine weitere Auswahl hinzufügen, Auswahl_email. Der Code dafür sieht dann so aus:

Code:
FROM
((tbl_mitglieder_stamm

LEFT JOIN tbl_mitglieder_adresse
ON ([Formulare]![frm_kontakte_versandlisten]![auswahl_adresse]="Korrespondenz" AND tbl_mitglieder_stamm.[korrespondenz_adresse]=tbl_mitglieder_adresse.adresse_id)
OR  ([Formulare]![frm_kontakte_versandlisten]![auswahl_adresse]="Rechnungen" AND tbl_mitglieder_stamm.[rechnungen_adresse]=tbl_mitglieder_adresse.adresse_id)
OR ([Formulare]![frm_kontakte_versandlisten]![auswahl_adresse]="IRW/Privat" AND tbl_mitglieder_stamm.[irw_adresse]=tbl_mitglieder_adresse.adresse_id))

LEFT JOIN tbl_mitglieder_anrede
ON ([Formulare]![frm_kontakte_versandlisten]![auswahl_anrede]="Korrespondenz" AND tbl_mitglieder_stamm.[korrespondenz_anrede]=tbl_mitglieder_anrede.anrede_id)
OR ([Formulare]![frm_kontakte_versandlisten]![auswahl_anrede]="Rechnungen" AND tbl_mitglieder_stamm.[rechnungen_anrede]=tbl_mitglieder_anrede.anrede_id)
OR ([Formulare]![frm_kontakte_versandlisten]![auswahl_anrede]="IRW/Privat" AND tbl_mitglieder_stamm.[irw_anrede]=tbl_mitglieder_anrede.anrede_id))

LEFT JOIN tbl_mitglieder_email
ON ([Formulare]![frm_kontakte_versandlisten]![auswahl_email]="Korrespondenz" AND tbl_mitglieder_stamm.[korrespondenz_email]=tbl_mitglieder_email.email_id)
OR ([Formulare]![frm_kontakte_versandlisten]![auswahl_email]="Rechnungen" AND tbl_mitglieder_stamm.[rechnungen_email]=tbl_mitglieder_anrede.email_id)
OR ([Formulare]![frm_kontakte_versandlisten]![auswahl_email]="IRW/Privat" AND tbl_mitglieder_stamm.[irw_email]=tbl_mitglieder_anrede.email_id)

Hier erhalte ich leider die Fehlermeldung "Join-Ausdruck nicht unterstützt".
Ich habe schon ein bisschen mit Klammern herum gespielt, leider nicht erfolgreich. Hat jemand von euch eine Idee?
 
Ich sehe auf der Schnelle nur ein extra Klammer nach FROM, welches im oberen Statement nicht da ist
Ergänzung ()

Ah, und zusätzlich gibt es eine Klammer nach den beiden ersten Joins (nach der letzten Bedingung). Möglicherweise hast du dich einfach verklammert? 🙃
 
Dann müsste ja eine Anpassung der Klammerung so aussehen:
Code:
[CODE]FROM
(((tbl_mitglieder_stamm

LEFT JOIN tbl_mitglieder_adresse
ON ([Formulare]![frm_kontakte_versandlisten]![auswahl_adresse]="Korrespondenz" AND tbl_mitglieder_stamm.[korrespondenz_adresse]=tbl_mitglieder_adresse.adresse_id)
OR  ([Formulare]![frm_kontakte_versandlisten]![auswahl_adresse]="Rechnungen" AND tbl_mitglieder_stamm.[rechnungen_adresse]=tbl_mitglieder_adresse.adresse_id)
OR ([Formulare]![frm_kontakte_versandlisten]![auswahl_adresse]="IRW/Privat" AND tbl_mitglieder_stamm.[irw_adresse]=tbl_mitglieder_adresse.adresse_id))

LEFT JOIN tbl_mitglieder_anrede
ON ([Formulare]![frm_kontakte_versandlisten]![auswahl_anrede]="Korrespondenz" AND tbl_mitglieder_stamm.[korrespondenz_anrede]=tbl_mitglieder_anrede.anrede_id)
OR ([Formulare]![frm_kontakte_versandlisten]![auswahl_anrede]="Rechnungen" AND tbl_mitglieder_stamm.[rechnungen_anrede]=tbl_mitglieder_anrede.anrede_id)
OR ([Formulare]![frm_kontakte_versandlisten]![auswahl_anrede]="IRW/Privat" AND tbl_mitglieder_stamm.[irw_anrede]=tbl_mitglieder_anrede.anrede_id))

LEFT JOIN tbl_mitglieder_email
ON ([Formulare]![frm_kontakte_versandlisten]![auswahl_email]="Korrespondenz" AND tbl_mitglieder_stamm.[korrespondenz_email]=tbl_mitglieder_email.email_id)
OR ([Formulare]![frm_kontakte_versandlisten]![auswahl_email]="Rechnungen" AND tbl_mitglieder_stamm.[rechnungen_email]=tbl_mitglieder_anrede.email_id)
OR ([Formulare]![frm_kontakte_versandlisten]![auswahl_email]="IRW/Privat" AND tbl_mitglieder_stamm.[irw_email]=tbl_mitglieder_anrede.email_id))
[/CODE]

Leider funktioniert diese Lösung auch nicht, gleicher Fehler.
 
Bin jetzt kein Experte und auch nicht geläufig mit Access, aber die Klammer sehen komisch gesetzt aus.
Normal sollte das denke ich eher so aussehen, damit alle JOINS auf gleicher Eben sind.

Code:
FROM
tbl_mitglieder_stamm

LEFT JOIN tbl_mitglieder_adresse
ON ([Formulare]![frm_kontakte_versandlisten]![auswahl_adresse]="Korrespondenz" AND tbl_mitglieder_stamm.[korrespondenz_adresse]=tbl_mitglieder_adresse.adresse_id)
OR ([Formulare]![frm_kontakte_versandlisten]![auswahl_adresse]="Rechnungen" AND tbl_mitglieder_stamm.[rechnungen_adresse]=tbl_mitglieder_adresse.adresse_id)
OR ([Formulare]![frm_kontakte_versandlisten]![auswahl_adresse]="IRW/Privat" AND tbl_mitglieder_stamm.[irw_adresse]=tbl_mitglieder_adresse.adresse_id)

LEFT JOIN tbl_mitglieder_anrede
ON ([Formulare]![frm_kontakte_versandlisten]![auswahl_anrede]="Korrespondenz" AND tbl_mitglieder_stamm.[korrespondenz_anrede]=tbl_mitglieder_anrede.anrede_id)
OR ([Formulare]![frm_kontakte_versandlisten]![auswahl_anrede]="Rechnungen" AND tbl_mitglieder_stamm.[rechnungen_anrede]=tbl_mitglieder_anrede.anrede_id)
OR ([Formulare]![frm_kontakte_versandlisten]![auswahl_anrede]="IRW/Privat" AND tbl_mitglieder_stamm.[irw_anrede]=tbl_mitglieder_anrede.anrede_id)

LEFT JOIN tbl_mitglieder_email
ON ([Formulare]![frm_kontakte_versandlisten]![auswahl_email]="Korrespondenz" AND tbl_mitglieder_stamm.[korrespondenz_email]=tbl_mitglieder_email.email_id)
OR ([Formulare]![frm_kontakte_versandlisten]![auswahl_email]="Rechnungen" AND tbl_mitglieder_stamm.[rechnungen_email]=tbl_mitglieder_anrede.email_id)
OR ([Formulare]![frm_kontakte_versandlisten]![auswahl_email]="IRW/Privat" AND tbl_mitglieder_stamm.[irw_email]=tbl_mitglieder_anrede.email_id)
 
Ja schaut für mich auch besser aus. Arbeite nur mit SQL Server, aber Access wird nicht ganz anders sein vermutlich
 
Ich danke euch schonmal und versuche es morgen mal. Ich melde mich mit dem Ergebnis.

Meiner Erfahrung nach ist Access was die Synthax betrifft deutlich zickiger als normale SQL Server, aber ich hoffe mal dass es klappt.
 
Ich habe es jetzt mit folgendem Code probiert:

Code:
FROM
tbl_mitglieder_stamm

LEFT JOIN tbl_mitglieder_adresse ON ([Formulare]![frm_kontakte_versandlisten]![auswahl_adresse]="Korrespondenz" AND tbl_mitglieder_stamm.[korrespondenz_adresse]=tbl_mitglieder_adresse.adresse_id)
OR  ([Formulare]![frm_kontakte_versandlisten]![auswahl_adresse]="Rechnungen" AND tbl_mitglieder_stamm.[rechnungen_adresse]=tbl_mitglieder_adresse.adresse_id)
OR ([Formulare]![frm_kontakte_versandlisten]![auswahl_adresse]="IRW/Privat" AND tbl_mitglieder_stamm.[irw_adresse]=tbl_mitglieder_adresse.adresse_id)

LEFT JOIN tbl_mitglieder_anrede ON ([Formulare]![frm_kontakte_versandlisten]![auswahl_anrede]="Korrespondenz" AND tbl_mitglieder_stamm.[korrespondenz_anrede]=tbl_mitglieder_anrede.anrede_id)
OR ([Formulare]![frm_kontakte_versandlisten]![auswahl_anrede]="Rechnungen" AND tbl_mitglieder_stamm.[rechnungen_anrede]=tbl_mitglieder_anrede.anrede_id)
OR ([Formulare]![frm_kontakte_versandlisten]![auswahl_anrede]="IRW/Privat" AND tbl_mitglieder_stamm.[irw_anrede]=tbl_mitglieder_anrede.anrede_id)

LEFT JOIN tbl_mitglieder_email ON ([Formulare]![frm_kontakte_versandlisten]![auswahl_email]="Korrespondenz" AND tbl_mitglieder_stamm.[korrespondenz_email]=tbl_mitglieder_email.email_id)
OR ([Formulare]![frm_kontakte_versandlisten]![auswahl_email]="Rechnungen" AND tbl_mitglieder_stamm.[rechnungen_email]=tbl_mitglieder_anrede.email_id)
OR ([Formulare]![frm_kontakte_versandlisten]![auswahl_email]="IRW/Privat" AND tbl_mitglieder_stamm.[irw_email]=tbl_mitglieder_anrede.email_id)

Jetzt erhalte ich diese Fehlermeldung: Syntaxfehler (fehlender Operator) in Abfrageausdruck.
Den gleichen Fehler erhalte ich auch wenn ich den dritten Teil weg lasse. Die Klammersetzung war glaube ich damit richtig.

EDIT: Nachdem ich das letzte Left Join komplett gelöscht habe und ochmal von Hand neu geschrieben habe, habe ich nur noch Syntax-Errors bekommen. Der Fehler "Join-Ausdruck nicht unterstützt" tauchte schonmal nicht mehr auf. Dann habe ich nochmal alle Klammern gelöscht und neu gesetzt und jetzt funktioniert es. Der fertige Code in Access sieht dann so aus:

Code:
FROM
((tbl_mitglieder_stamm

LEFT JOIN tbl_mitglieder_adresse ON ([Formulare]![frm_kontakte_versandlisten]![auswahl_adresse]="Korrespondenz" AND tbl_mitglieder_stamm.[korrespondenz_adresse]=tbl_mitglieder_adresse.adresse_id)
OR  ([Formulare]![frm_kontakte_versandlisten]![auswahl_adresse]="Rechnungen" AND tbl_mitglieder_stamm.[rechnungen_adresse]=tbl_mitglieder_adresse.adresse_id)
OR ([Formulare]![frm_kontakte_versandlisten]![auswahl_adresse]="IRW/Privat" AND tbl_mitglieder_stamm.[irw_adresse]=tbl_mitglieder_adresse.adresse_id))

LEFT JOIN tbl_mitglieder_anrede ON ([Formulare]![frm_kontakte_versandlisten]![auswahl_anrede]="Korrespondenz" AND tbl_mitglieder_stamm.[korrespondenz_anrede]=tbl_mitglieder_anrede.anrede_id)
OR ([Formulare]![frm_kontakte_versandlisten]![auswahl_anrede]="Rechnungen" AND tbl_mitglieder_stamm.[rechnungen_anrede]=tbl_mitglieder_anrede.anrede_id)
OR ([Formulare]![frm_kontakte_versandlisten]![auswahl_anrede]="IRW/Privat" AND tbl_mitglieder_stamm.[irw_anrede]=tbl_mitglieder_anrede.anrede_id))

LEFT JOIN tbl_mitglieder_email ON ([Formulare]![frm_kontakte_versandlisten]![auswahl_email]="Korrespondenz" AND tbl_mitglieder_stamm.[korrespondenz_email]=tbl_mitglieder_email.email_id)
OR  ([Formulare]![frm_kontakte_versandlisten]![auswahl_email]="Rechnungen" AND tbl_mitglieder_stamm.[rechnungen_email]=tbl_mitglieder_email.email_id)
OR ([Formulare]![frm_kontakte_versandlisten]![auswahl_email]="IRW/Privat" AND tbl_mitglieder_stamm.[irw_email]=tbl_mitglieder_email.email_id)

Irgendwo war also der Wurm drin, denn die Klammern hatte ich glaube ich gestern schon einmal so gesetzt. Wie auch immer, jetzt läufts, danke für eure Hilfe.
 
Zuletzt bearbeitet von einem Moderator:
Zurück
Oben