2013-03-25 163 views

回答

4

查詢工作,因爲它的Extended GROUP BY能力上MySQL。這種行爲在MySQL可以,如果你啓用ONLY_FULL_GROUP_BY SQL模式的限制。

但在SQL Server,你需要明確定義所有GROUP BY子句中未聚合的列這些都對SELECT條款定義

SELECT t.name, COUNT(d.data) 
FROM types AS t 
     LEFT JOIN data AS d ON d.typeId = t.id 
GROUP BY d.typeId, t.name; 
1

這裏有兩個SQL Server的查詢(SQL Fiddle),這將使你想要而不需要額外的GROUP BY項目的結果。

SELECT t.name, a.ct 
FROM types AS t 
OUTER APPLY (
    SELECT COUNT(d.data) AS ct 
    FROM data AS d 
    WHERE d.typeId = t.id 
) as A 

SELECT 
    t.name, 
    (SELECT COUNT(d.data) 
    FROM data AS d 
    WHERE d.typeId = t.id 
) AS ct 
FROM types AS t 

在這兩種情況下(在MySQL),你應該確保有types.name和types.id之間的1對1的關係。至少在SQL Server中,如果不是這樣,結果是明確的。在MySQL中,如果給定types.id有多個types.name值,則可以獲得任何匹配的名稱。

相關問題