驚き -- これは MySQL で完全に有効なクエリです。
select X, Y from someTable group by X
Oracle または SQL Server でこのクエリを実行すると、自然なエラー メッセージが表示されます。
Column 'Y' is invalid in the select list because it is not contained in
either an aggregate function or the GROUP BY clause.
では、MySQL は各 X に対してどの Y を表示するかをどのように決定するのでしょうか? 1 つを選択するだけです。私が知る限り、最初に見つかった Y を選択するだけです。Y が集計関数でも group by 句でもない場合、クエリで「select Y」を指定しても、そもそも意味がありません。したがって、データベース エンジンとしての I は、必要なものを何でも返します。
この「緩み」をオフにする MySQL 構成パラメーターもあります。 http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_only_full_group_by
この記事では、この点に関して、MySQL が ANSI-SQL に準拠していないと批判されていることについても触れています。 http://www.oreillynet.com/databases/blog/2007/05/debunking_group_by_myths.html
私の質問は: なぜMySQL はこのように設計されたのですか? ANSI-SQL を破る理由は何でしたか?