GROUP BY A.*
ist in SQL nicht erlaubt.
Sie können dies umgehen, indem Sie eine Unterabfrage verwenden, nach der Sie gruppieren und dann beitreten:
SELECT A.*, COALESCE(B.cnt, 0) AS Count_B_Foo
FROM TABLE1 AS A
LEFT JOIN
( SELECT FKey, COUNT(foo) AS cnt
FROM TABLE2
GROUP BY FKey
) AS B
ON A.PKey = B.FKey ;
Es gibt eine Funktion in SQL-2003-Standard, die zulässt, dass in der SELECT
Liste Spalten enthalten sind, die nicht in der GROUP BY
Liste enthalten sind, sofern sie funktionsabhängig sind. Wenn diese Funktion in SQL-Server implementiert wurde, könnte Ihre Abfrage folgendermaßen lauten:
SELECT A.*, COUNT(B.foo)
FROM TABLE1 A
LEFT JOIN TABLE2 B ON A.PKey = B.FKey
GROUP BY A.pk --- the Primary Key of table A
Leider wurde dieses Feature noch nicht implementiert, auch nicht in der SQL-Server 2012-Version - und meines Wissens in keinem anderen DBMS. Mit Ausnahme von MySQL, das es nur unzureichend enthält (unzureichend als: Die obige Abfrage funktioniert, die Engine prüft jedoch nicht auf funktionale Abhängigkeiten, und andere falsch geschriebene Abfragen zeigen falsche, halbzufällige Ergebnisse an).
Wie @Mark Byers uns in einem Kommentar mitteilte, hat PostgreSQL 9.1 eine neue Funktion hinzugefügt, die für diesen Zweck entwickelt wurde. Es ist restriktiver als die Implementierung von MySQL.
GROUP BY
Klausel in derSELECT
Liste, aber es lässt es wie auf dem undefiniert Reihe dieser Wert aus kommen (so , wenn die Spalte oder den Ausdruck isn 't funktionell abhängig von der Gruppierung Ausdruck, dann könnte es aus jeder Zeile in der Gruppe kommen).