GROUP BY A.*
SQLでは許可されていません。
グループ化するサブクエリを使用してこれをバイパスし、結合することができます:
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 ;
SQL-2003標準には、機能的にそれらに依存している限りSELECT
、GROUP BY
リスト内にリストにない列を許可する機能があります。その機能がSQL-Serverに実装されていた場合、クエリは次のように記述できます。
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
残念ながら、この機能はまだ実装されておらず、SQL-Server 2012バージョンでも、そして私が知る限り他のDBMSでも実装されていません。それを持っているが不十分なMySQLを除いて(不適切:上記のクエリは機能しますが、エンジンは機能的な依存関係をチェックせず、他の不適切なクエリは間違った、半ランダムな結果を表示します)。
@マークByers氏はコメントで私たちを知らせ、PostgreSQLの9.1は、新しい機能を追加、この目的のために設計されています。MySQLの実装よりも制限的です。
GROUP BY
中で句SELECT
リストが、それはそれは価値が列または式ならば(soから来ることをどの行へと未定義のままISN 「tはグループ化式の際に機能的に依存し、それは可能性)グループ内の任意の行から来ます。