Сюрприз - это вполне допустимый запрос в MySQL:Почему MySQL разрешает запросы «group by» без агрегатных функций?
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 не является ни агрегатной функцией, ни в предложении group by, то указание «выбрать Y» в вашем запросе не имеет смысла начинать. Поэтому я, как механизм базы данных, возвращу все, что захочу, и вам понравится.
Существует даже параметр конфигурации 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?
Позвольте мне это так. Я рассматриваю этот вариант дизайна как эквивалент языка программирования, который позволяет разрешить и игнорировать, скажем, «нулевое» значение слева. например "null = 3". Просто нет причин позволять этому случиться. Это ошибка, которая всегда и опасно ошибочна. –
@lumpynose, ерунда, это могло быть верно pre 5.x – Johan
@lumpynose Можете ли вы дать ссылку на ваше утверждение? – Barranka