您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

MySQL-选择不在分组依据中的列

MySQL-选择不在分组依据中的列

的确,此功能允许一些模棱两可的查询,并且以静方式返回结果集,并从该列中选择一个任意值。实际上,它往往是该组中的行中的值首先被物理存储。

如果您仅选择功能上依赖于GROUP BY条件中的列的列,则这些查询并不是明确的。换句话说,如果每个用于定义该组的值的“歧义”列中只有一个不同的值,则没有问题。此查询在Microsoft sql Server(和ANSI sql)中将是非法的,即使它不能在逻辑上导致歧义:

SELECT AVG(table1.col1), table1.personID, persons.col4
FROM table1 JOIN persons ON (table1.personID = persons.id)
GROUP BY table1.personID;

另外,MysqL具有sql模式以使其符合标准:ONLY_FULL_GROUP_BY

FWIW,sqlite也允许这些模棱两可的GROUP BY子句,但是它从组的 最后 一行选择值。?

?至少在我测试的版本中。表示 任意性的意思 是,MysqLsqlite将来都可能更改其实现,并具有一些不同的行为。因此,在这样的模棱两可的情况下,您不应该依赖行为保持当前状态。最好将查询重写为确定性的,而不是模棱两可的。这就是为什么MysqL 5.7现在认情况下启用ONLY_FULL_GROUP_BY的原因。

MySQL 2022/1/1 18:19:28 有485人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶