Daniela Koller: INNER JOIN NULL PROBLEM mit GROUP

Beitrag lesen

Hi Marco

Dieses OR IS NULL solltest du allgemein nicht verwenden. Es gibt spezielle Join Syntax. Deine Version entspricht einem INNER JOIN:

SELECT ...
  FROM tab1 INNER JOIN tab2 on (tab1.x = tab2.x)

Du willst aber gar keinen INNER JOIN sondern einen OUTER JOIN, also auch NULL-Werte zulassen. Die Standard-Syntax dafür ist:

SELECT ...
  FROM tab1 LEFT (OUTER) JOIN tab2 on (tab1.x = tab2.x)

In diesem Fall erhälst du sämtliche Einträge von tab1 und dazu sämtliche ein passenden Einträge von tab2 oder NULL-Werte falls keiner existiert. Es gibt auch einen RIGHT JOIN (der nimmt dann alles von tab2 und passendes resp NULL von tab1) und einen FULL OUTER JOIN, der nimmt dann alles von tab1 und tab2, matcht zusammen und ergänzt wo nötig um NULL-Werte.

Die genaue Schreibweise, insbesondere ob das Schlüsselwort OUTER benötigt wird oder nicht, hängt von deinem DBMS ab. Dazu solltest du also das Handbuch konsultieren. Sollte dein DBMS Oracle in einer sehr alten Version sein (afaik 7 und früher), ist die Syntax leider ganz anders.

Gruss Daniela