yo,
den richtigen hinweis hat dir Cheatah schon gegeben. genau für dieses problem, gibt es in SQL OUTER JOINS oder wörtlich gesprochen, zeige mir alle einträge der einen tabelle und wenn vorhanden, auch die entsprechenden werte der zweiten tabelle.
Ausserdem bekomme ich den Eintrag aus tab1 sooft, wie es eine passende tab2-Zeile gibt.
das ist auch gut so, wäre fatal wenn es nicht so wäre. je nachdem welche infos (spalten) du alle ausgeben lassen willst, kannst du ein DISTINCT ausführne lassen, der doppelte datensätze herausfiltert. zu beachten ist dabei, dass alle werte der spaltenausgabe gleich sein müssen und nicht nur einer.
[1] Ich habe die Funktionsweise von group by nie so ganz kapiert und auch noch keine einzige Erklärung im Internet dafür gefunden.
hinter gruppierung versteckt sich eine ganz einfache sortierung. das dbms macht bei einer gruppierung quasi folgendes. es nimmt alle datensätze der ergebnismenge und sortiert sie nach den spalten, die in der GROUP BY klausel mit angegeben wurde. ist nur eine spalte angegeben, dann werden die datensätze auch nur nach dieser sortiert. sind zwei angegeben, dann zuerst nach der ersten sortiert und dann nach der zweiten spalte, etc.
nach der ausführung der gruppierung hat man quasi die ergebnismenge einfach nur sortiert, dass ist alles, was hinter GROUP BY steckt. bei der ausgabe wird immer nur ein datensatz einer grupperung zurückgegeben, wobei wie gesagt eine gruppierung mehrere spalten umfassen kann.
da die spaltenwerte, über die nicht gruppiert wurden, unterschiedliche werte innheralb einer gruppierung enthalten können, darf man sie auch nicht so einfach bei ader abfrage mit ausgeben lassen. letztlich wird ja nur ein datensatz pro gruppierung zurück gegeben. und wenn die werte unterschiedlich sind, dann kann das dbms nicht entschieden, welchen wert es nun angeben soll.
anders liegt der fall, wenn man über diese spalte eine aggregat-funktion einsetz. damit wird sichergestellt, dass es n ur einen wert gibt, zum beispiel der größte oder der durschnittswert. deshalb gibt es die regel, nur spalten auszugeben, über die entweder gruppiert wurde oder aber eine aggregat-funktion benutzen.
Ilja