查詢在MySQL而不是在MSSQL工作正常。該小提琴:「[columnname]不包含在聚合函數或GROUP BY子句中。」
的MySQL:http://sqlfiddle.com/#!8/f1959/2
MSSQL:http://sqlfiddle.com/#!6/4d276/2
好像一個事實,即MySQL是讓它工作將使一個更快的查詢,因爲INT的速度會更快通過比變長字符串搜索..
查詢在MySQL而不是在MSSQL工作正常。該小提琴:「[columnname]不包含在聚合函數或GROUP BY子句中。」
的MySQL:http://sqlfiddle.com/#!8/f1959/2
MSSQL:http://sqlfiddle.com/#!6/4d276/2
好像一個事實,即MySQL是讓它工作將使一個更快的查詢,因爲INT的速度會更快通過比變長字符串搜索..
查詢工作,因爲它的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;
這裏有兩個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值,則可以獲得任何匹配的名稱。
MySQL支持哪些SQL Server不:http://dev.mysql.com/doc/refman/5.0/en/group-by-extensions.html – 2013-03-25 02:10:23