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