Vinzenz Mai: Join Problem

Beitrag lesen

Hallo,

Nun will ich alle Elemente von Tabelle a ausgeben, und, wenn vorhanden, ein bestimmtes Element aus b, das eine Bedingung erfüllt:

select * from a left join c on a.ID=c.Key where c.Key2=xy or c.Key is null

Wo ist hier b im Spiel? Nirgendwo. Verstümmele Fragestellungen nicht bis zum Geht-nicht-mehr. Sowas trägt nicht zum Verständnis bei. Beispieltabelle mit je zwei Beispielspalten, ein paar Beispieldatensätzen und dem gewünschten Resultat wäre hilfreich. Außerdem wäre es hilfreich, wenn die Tabellen nicht a, b, c hießen, sondern vernünftige (ihre richtigen) Namen trügen.

so erhalte ich aber leider nicht alle Elemente aus a, denn Elemente, die nicht mit c.Key=xy verknüpft sind, sondern mit einem anderen Element aus c, fallen raus.

Ja, genau das sagt Deine Anweisung aus. Du verknüpfst a mit c über die Gleichheitsbedingung der Spalten a.ID und c.Key, wobei Du außerdem noch alle Datensätze aus a haben möchtest, die keine Entsprechung in c haben.

Die resultierende Ergebnismenge schränkst Du ein, auf die Datensätze, für die es kein Gegenstück zur a.ID in c gibt (c.Key IS NULL) oder für die c.Key2 einen bestimmten Wert hat (wenn es ein Gegenstück gibt).

Kennt hier jemand eine Lösung? (MySql 5.0)

Da Du alles aus a ausgeben möchtest und nur in bestimmten Fällen noch Informationen aus c (bzw. b), sieht es so aus, als möchtest Du alle Bedingungen in die Join-Bedingung packen:

SELECT  
    <spaltenliste>  
FROM  
    a  
LEFT JOIN  
    c  
ON  
    a.ID = c.Key  
AND  
    c.Key2 = <bestimmter wert>  

siehe dazu auch das Beispiel in diesem Archivbeitrag.

Freundliche Grüße

Vinzenz