クエリは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 BYSELECT
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値がある場合、一致する名前のいずれかを取得できます。