0

クエリはMySQLでは正常に機能しますが、MSSQLでは機能しません。フィドル:

MySQL:http ://sqlfiddle.com/#!8/f1959/2

MSSQL:http ://sqlfiddle.com/#!6/4d276/2

MySQLがそれを機能させているという事実は、intが可変長の文字列よりも検索が高速であるため、クエリを高速化するように思われます。

4

2 に答える 2

4

クエリ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;
于 2013-03-25T02:09:23.670 に答える
1

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

于 2013-03-25T04:31:46.467 に答える