aufschwung: LEFT JOIN über drei Tabellen hinweg

Hallo,

erst mal vielen Dank für den Join-Beitrag:
http://aktuell.de.selfhtml.org/artikel/datenbanken/joins/

Eine Frage zu diesem Thema hätte ich noch: Wie schaffe ich es, über drei Tabellen sauber zu joinen?

Folgendes funktioniert, bei zwei Tabellen mache ich einen LEFT JOIN:

  
SELECT a.a1, a.b1, a.c1, b.a1, b.d1, b.e1  
FROM tabelle_a a  
LEFT JOIN tabelle_b b ON a.a1 = b.a1

Nun möchte ich über drei Tabellen einen LEFT JOIN ausführen:

  
SELECT a.a1, a.b1, a.c1, b.a1, b.d1, b.e1, c.b1, c.f1, c.g1  
FROM tabelle_a a  
LEFT JOIN tabelle_b b ON a.a1 = b.a1  
LEFT JOIN tabelle_c c ON a.b1 = c.b1

Das klappt leider nicht, es werden viel zu viele Ergebnisse angezeigt ;-(

Hat mir jemand einen Tipp, wie ich mein Problem lösen könnte?

Viele Grüße

  1. Das klappt leider nicht, es werden viel zu viele Ergebnisse angezeigt ;-(

    Hat mir jemand einen Tipp, wie ich mein Problem lösen könnte?

    Hi,

    haben denn Tabelle B und C auch einen gemeinsamen Schlüssel? So wie es scheint, suchst Du ja nach der Essenz aus allen 3 Tabellen, dann müsstest Du auch die B und C-Tabelle joinen.

    Machst Du aber nicht. Oder ich verstehe nicht, was Du als Ergebnis suchst und was Du am gezeigten Ergebnis nicht willst.

    Gruß, Torro

    1. haben denn Tabelle B und C auch einen gemeinsamen Schlüssel? So wie es scheint, suchst Du ja nach der Essenz aus allen 3 Tabellen, dann müsstest Du auch die B und C-Tabelle joinen.

      Hallo,

      vielen Dank für deine Antwort.

      B und C haben keinen gemeinsamen Schlüssel. Funktioniert deswegen meine Join-Lösung nicht? Gibt es hier Lösungsalternativen?

      Ich dachte, der Join läuft wie folgt ab:
      Alle Datensätze von A werden angezeigt und durch den Join werden alle Datensätze sofern im Datensatz angezeigt. Der weitere Join soll zusätzlich die Informationen von C anzeigen, sofern diese eine Entsprechung in A haben.

      Viele Grüße

      1. Hi!

        B und C haben keinen gemeinsamen Schlüssel. Funktioniert deswegen meine Join-Lösung nicht? Gibt es hier Lösungsalternativen?

        Mit einem richtigen Beispiel könnte man vielleicht sehen, was da wie zusammenhängt. Mit dem Pseudocode und ohne das Wissen um die Zusammenhänge kann man im Prinzip nur mit den Schultern zucken.

        Alle Datensätze von A werden angezeigt und durch den Join werden alle Datensätze sofern im Datensatz angezeigt. Der weitere Join soll zusätzlich die Informationen von C anzeigen, sofern diese eine Entsprechung in A haben.

        Wie sind diese Beziehungen definiert? Was für Werte stehen denn in den anderen Tabellen? Jeweils nur einer mit einer Beziehung zum A-Datensatz oder mehrere? Im ersten Fall sind auch korrelierte Unterabfragen (correlated subquery) verwendbar.

        Lo!

      2. Hi,

        B und C haben keinen gemeinsamen Schlüssel. Funktioniert deswegen meine Join-Lösung nicht? Gibt es hier Lösungsalternativen?

        Das ist unmöglich, Dir hierauf eine Antwort zu geben, da Dein Beispiel zu theoretisch ist. Man müsste die Tabellen mal in Echt ansehen, dann könnte man darauf antworten.

        Ich dachte, der Join läuft wie folgt ab:
        Alle Datensätze von A werden angezeigt und durch den Join werden alle Datensätze sofern im Datensatz angezeigt. Der weitere Join soll zusätzlich die Informationen von C anzeigen, sofern diese eine Entsprechung in A haben.

        Und was erhältst Du stattdessen?

        Gruß, Torro