MySQL 5.7 的 only_full_group_by
错误:详解及解决方案
在 MySQL 5.7 中遇到 "Expression #1 of SELECT list is not in GROUP BY clause" 以及 "only_full_group_by" 错误可能会让人困惑。本文旨在阐明此问题并提供解决方案。
问题分析
5.7 之前的 MySQL 版本允许 SELECT 列表中包含未出现在 GROUP BY 子句中的列,即使这些列的值在分组内可能不同。然而,在 5.7 版本中,默认行为已更改,仅当这些列被聚合时才允许这样做。这是由 "only_full_group_by" 模式强制执行的。
问题解决
该错误表明查询的 SELECT 列表中包含一个未聚合的列,该列与 GROUP BY 子句中的列之间不存在函数依赖关系。要解决此问题,可以删除未聚合的列,或将其添加到 GROUP BY 子句中。
推荐解决方案
对于此特定查询,建议将 "group_id" 列添加到 GROUP BY 子句中,确保所有未聚合的列都与 GROUP BY 子句中的列存在函数依赖关系:
<code class="language-sql">SELECT g.group_id AS 'value', g.group_name AS 'text' FROM mod_users_groups g LEFT JOIN mod_users_data d ON g.group_id = d.group_id WHERE g.active = 1 AND g.department_id = 1 AND g.manage_work_orders = 1 AND g.group_name != 'root' AND g.group_name != 'superuser' GROUP BY g.group_id, g.group_name HAVING COUNT(d.user_id) > 0 ORDER BY g.group_name</code>
其他注意事项
在多表查询中,最好使用表名或别名限定列名,如推荐解决方案所示。
不建议关闭 "only_full_group_by",因为它允许任意选择未聚合的列,这可能导致结果不一致且不可预测。
以上是如何解决mySQL的' belly_full_group_by”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!