Почему MySQL позволяет «группировать» запросы без агрегатных функций?

Сюрприз - это совершенно правильный запрос в 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 определяет, какой Y показывать для каждого X? Это просто выбирает один. Из того, что я могу сказать, он просто выбирает первый Y, который он находит. Обоснованием является то, что если Y не является ни агрегатной функцией, ни предложением group by, то указав & # x201C; выберите Y & # x201D; в вашем запросе нет смысла начинать с. Поэтому я, как движок базы данных, верну все, что захочу, и вам это понравится.

Есть даже параметр конфигурации MySQL для отключения этой & # x201C; looseness & # x201D ;. 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

Мой вопрос:Why MySQL был разработан таким образом? Каково было их основание для разрыва с ANSI-SQL?

Ответы на вопрос(6)

Ваш ответ на вопрос