惊喜-这是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?它只是选择一个。据我所知,它只是选择找到的第一个Y。理由是,如果Y既不是聚合函数也不在group by子句中,则在查询中指定“ select Y”是没有道理的。因此,作为数据库引擎的我将返回我想要的任何东西,而您会喜欢它。甚至还有一个MySQL配置参数来关闭这种“松散性”。 http://dev.mysql.com/doc/refman/5.7/zh-CN/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的理由是什么?
3 回答
慕慕森
TA贡献1856条经验 获得超17个赞
不幸的是,几乎所有的SQL变体都有可能破坏ANSI并导致无法预测的结果。
在我看来,他们希望将其像许多其他系统所具有的“ FIRST(Y)”功能一样对待。
这种构造很有可能是MySQL团队感到遗憾的,但是由于可能中断的应用程序数量,不想停止支持。
抢
添加回答
举报
0/150
提交
取消