[Acc97] JOIN auf zwei oder mehr Tabellen

Hallo Wer-Weiss-Wasser,

Folgendes Problem: Eine Datenbank mit drei Tabellen:

Tabelle1
--------
Feld1
Feld2




Tabelle2
--------
Feld1
Feld2




Tabelle3
--------
Feld1
Feld2

Diese drei Tabellen sollen nun auf folgende Weise miteinander über JOINs verknüpft werden:

  • Tabelle1 mit Tabelle2 per INNER JOIN über Tabelle1.Feld1 = Tabelle2.Feld1
  • Tabelle3 mit Tabelle1 und Tabelle2 per LEFT JOIN über Tabelle1.Feld2 = Tabelle3.Feld1 UND Tabelle2.Feld2 = Tabelle3.Feld2

Instinktiv und nach bestem Wissen und Gewissen würde ich den SQL-String so aufbauen:

SELECT \* FROM
(Tabelle1 INNER JOIN Tabelle2 ON Tabelle1.Feld1 = Tabelle2.Feld1)
LEFT JOIN Tabelle3 ON
Tabelle1.Feld2 = Tabelle3.Feld1 AND
Tabelle2.Feld2 = Tabelle3.Feld2;

Wie ihr euch schon denken könnt funktioniert das ganze leider nicht, sonst würde ich hier nicht posten;
Also, kann mir einer von euch helfen und mir sagen, wie das nun geht; Beziehungsweise ob man überhaupt in einem Join bei Access Bezug nehmen kann auf mehr als eine Tabelle?

Vielen Dank im Voraus,
Thomas

Hi Thomas!

An sich müßte das gehen, aber ich bin weniger der SQL-Freak. Versuch doch mal, das über die grafischen Möglichkeiten der Entwurfsansicht aufzubauen. (-> Abfrage neu, Entwurfsansicht, die drei Tabellen hinzufügen und dann die gewünschten Zellen durch ziehen mit der Maus in die gewünschte Richtung verbinden. Und die gewünschten Ausgabefelder nicht vergessen…)

Gruß,
Claudio

Hallo.

Also, kann mir einer von euch helfen und mir sagen, wie das
nun geht; Beziehungsweise ob man überhaupt in einem Join bei
Access Bezug nehmen kann auf mehr als eine Tabelle?

Beziehungsweise geht das. Leider nicht ganz so einfach, wenn unterschiedliche Joins in der gleichen Abfrage verwendet werden sollen, weil die Richtung dann nicht mehr eineindeutig ist. Abhilfe über Zwischenstep - erst den einen Join in Abfrage 1, dann den anderen in Abfrage 2 …

Gruß kw

Hi,

Folgendes Problem: Eine Datenbank mit drei Tabellen:

Tabelle1

Feld1
Feld2

Tabelle2

Feld1
Feld2

Tabelle3

Feld1
Feld2

Diese drei Tabellen sollen nun auf folgende Weise miteinander
über JOINs verknüpft werden:

  • Tabelle1 mit Tabelle2 per INNER JOIN über Tabelle1.Feld1 =
    Tabelle2.Feld1
  • Tabelle3 mit Tabelle1 und Tabelle2 per LEFT JOIN über
    Tabelle1.Feld2 = Tabelle3.Feld1 UND Tabelle2.Feld2 =
    Tabelle3.Feld2

Hmmm. Leider fällt mir aufgrund der Namensgebung nichts ein, was den Lösungsweg „per gesunden Menschenverstand“ aufzeigen würde - wenn Du stattdessen mit Bestellung, Artikel, Bestellposition o.Ä. hantierst fällt Dir häufig mehr ein.

Instinktiv und nach bestem Wissen und Gewissen würde ich den
SQL-String so aufbauen:

SELECT * FROM
(Tabelle1 INNER JOIN Tabelle2 ON Tabelle1.Feld1 =
Tabelle2.Feld1)
LEFT JOIN Tabelle3 ON
Tabelle1.Feld2 = Tabelle3.Feld1 AND
Tabelle2.Feld2 = Tabelle3.Feld2;

Ich glaube, das Problem liegt hier im *. Der Ausdruck aus der Klammer kann als eigene Tabelle betrachtet werden, somit gibt es für den zweiten Join weder Tabelle1 noch Tabelle2.

Also, kann mir einer von euch helfen und mir sagen, wie das
nun geht; Beziehungsweise ob man überhaupt in einem Join bei
Access Bezug nehmen kann auf mehr als eine Tabelle?

Das geht schon! Access kommt aber durcheinander, wenn die Abfrage zu komplex ist, d.h. wegen der kreuzweise Verknüpfung der letzten beiden Zeilen. Änderst Du die letzte Zeile

Tabelle2.Feld2 = Tabelle3.Feld2;

in

Tabelle1.Feld2 = Tabelle3.Feld2;

versteht Access das.

Ich würde vorschlagen, erstelle eine Abfrage Abfrage1 aus dem ersten INNER JOIN, dann eine darauf basierende Afrage2:

SELECT \*
 FROM Abfrage1 LEFT JOIN Tabelle3 
 ON Abfrage1.Tabelle2.feld2 = Tabelle3.feld2 
 AND Abfrage1.Tabelle1.feld2 = Tabelle3.feld1;

Gruß

J.

ohne text

wDrhhDr :smile: o.T.

ohne text

Dito