首页 > 数据库 > mysql教程 > 如何解决mySQL的' belly_full_group_by”错误?

如何解决mySQL的' belly_full_group_by”错误?

DDD
发布: 2025-01-25 03:02:10
原创
361 人浏览过

How to Resolve MySQL's

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板