不使用 GROUP BY 的聚合查询:了解错误和解决方案
以前,在旧版本的 MySQL 上,不使用 GROUP BY 子句的聚合查询函数(例如 COUNT())通常可以毫无问题地运行。但是,在 MySQL 5.7.14 及更高版本中,此类查询可能会遇到错误:
SQLSTATE[42000]: Syntax error or access violation: 1140 In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column [...]
此错误源于 MySQL 的默认行为的更改,以与其他 RDBMS 系统保持一致,这需要非聚合字段使用聚合函数时要包含在 GROUP BY 子句中的 SELECT 子句中。
解决错误:
要解决此错误,您有两个选项:
1。调整 MySQL 设置:
您可以通过修改 MySQL 的设置来恢复到旧版行为。但是,通常不建议这样做,因为它会延续非最佳查询实践。
2.修复查询:
首选解决方案是修改查询以在 GROUP BY 子句中包含非聚合列。例如,上面的查询可以重写为:
SELECT id, password, COUNT(id) AS count FROM users WHERE email = :email GROUP BY id, password LIMIT 1
Exception in 5.7.5 :
在 MySQL 5.7.5 版本及更高版本中,它仍然是当非聚合列被限制为单个值时(例如,在 WHERE 子句中使用过滤器),允许从 GROUP BY 子句中排除非聚合列。可以在此处找到此异常的详细信息和示例。
以上是为什么我的没有 GROUP BY 的聚合查询会在 MySQL 5.7.14 中导致错误?的详细内容。更多信息请关注PHP中文网其他相关文章!