heinetz: MySQL-Tabellen verknüpfen

Hallo Forum,

ich habe in meiner DB zwei Tabellen. Mein SQL-Statement soll
ein Resultset zurückliefern, in dem diese Tabellen über z.B.
ein Feld 'ID' miteinander verknüpft sind.

Jetzt gibt es in der Tabelle A.Feld 'ID' die Werte 1-10 und
in Tabelle B.Feld 'ID' die Werte 1-5.

Wenn ich die Verknüpfung beider Tabellen über:

JOIN Tabelle B ON Tabelle A.ID =  Tabelle B.ID

... mache finde ich in meinem Resultset die fünf Datensätze,
die in beiden Tabellen auftauchen.

Wenn ich die Verknüpfung beider Tabellen über:

LEFT JOIN Tabelle B ON Tabelle A.ID =  Tabelle B.ID

... mache finde ich in meinem Resultset alle 10 Datensätze,
die in einer der Tabellen auftauchen. Die fehlenden Werte
sind NULL.

Das funktioniert soweit. Jetzt möchte ich aber die ganze
Verknüpfung um Tabelle C, in der nur 3 Werte auftauchen
erweitern:

LEFT JOIN Tabelle B ON Tabelle A.ID =  Tabelle B.ID
LEFT JOIN Tabelle C ON Tabelle A.ID =  Tabelle C.ID

... und dann werden die fehlenden Werte plötzloch nicht mehr
mit NULL aufgefüllt.

Woran liegt das ?

danke fuer tipps und

viel gruesse,
heinetz

  1. Hallo,

    ... und dann werden die fehlenden Werte plötzloch nicht mehr
    mit NULL aufgefüllt.

    welches Daten liegen vor, welches Ergebnis erwartest Du, welches erhältst Du?
    Seit MySQL 5.0.12 (oder so) ist die Join-Implementierung in MySQL ganz ordentlich und liefert die von der Theorie her erwarteten Resultate. Das hat viele, auch prominente, Anwendungen gebrochen, die sich auf die Werte verließen, die MySQL bis dahin lieferte, die der Theorie widersprachen.

    Welche Version also?

    Beispiel

    A  id
      ---
        1
        2
        3
        4

    B  id
      ---
        1
        3

    C  id
      ---
        1
        4

    SELECT  
        A.id,  
        B.id  
    FROM  
        A  
    LEFT JOIN  
        B  
    ON  
        A.id = B.id  
    
    

    liefert

    A.id | B.id
    -----------
       1 |    1
       2 | NULL
       3 |    3
       4 | NULL

    SELECT  
        A.id,  
        B.id,  
        C.id  
    FROM  
        A  
    LEFT JOIN  
        B  
    ON  
        A.id = B.id  
    LEFT JOIN  
        C  
    ON  
        A.id = C.id  
    
    

    liefert

    A.id | B.id | C.id
    -------------------
       1 |    1 |    1
       2 | NULL | NULL
       3 |    3 | NULL
       4 | NULL |    4

    Dieses Ergebnis erwarte ich, dieses Ergebnis liefert MySQL in den Produktions 5er und 5.1er-Versionen. Dein Problem ist daher für mich nicht nachvollziehbar.

    Freundliche Grüße

    Vinzenz

    1. Hi,

      Dieses Ergebnis erwarte ich, dieses Ergebnis liefert MySQL in den Produktions 5er und 5.1er-Versionen. Dein Problem ist daher für mich nicht nachvollziehbar.

      hab's nochmal neu aufgebaut und jetzt verhält sich alles,
      genauso wie Du sagst.

      danke,
      gruss,
      heinetz