クエリはMySQLでは正常に機能しますが、MSSQLでは機能しません。フィドル:
MySQL:http ://sqlfiddle.com/#!8/f1959/2
MSSQL:http ://sqlfiddle.com/#!6/4d276/2
MySQLがそれを機能させているという事実は、intが可変長の文字列よりも検索が高速であるため、クエリを高速化するように思われます。
クエリはMySQLでは正常に機能しますが、MSSQLでは機能しません。フィドル:
MySQL:http ://sqlfiddle.com/#!8/f1959/2
MSSQL:http ://sqlfiddle.com/#!6/4d276/2
MySQLがそれを機能させているという事実は、intが可変長の文字列よりも検索が高速であるため、クエリを高速化するように思われます。
クエリMySQL
は、の機能のために機能しExtended GROUP BY
ます。SQLモードを有効にすると、のこの動作をMySQL
制限できます。ONLY_FULL_GROUP_BY
ただし、では、句で定義されている、集計されていない句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;
これは、追加のGROUPBYアイテムを必要とせずに必要な結果を提供する2つのSQLServerクエリ(SQL Fiddle )です。
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の関係があることを確認する必要があります。少なくともSQLServerでは、それが当てはまらない場合、結果は明確に定義されます。MySQLでは、特定のtypes.idに複数のtypes.name値がある場合、一致する名前のいずれかを取得できます。