Mysql8报错this is incompatible with sql_mode=only_full_group_by问题
代码剑客行
2024-04-02 17:21
这篇文章将为大家详细讲解有关Mysql8报错this is incompatible with sql_mode=only_full_group_by问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
MySQL 8 "this is incompatible with sql_mode=only_full_group_by" 错误
错误原因
此错误表明在使用 ONLY_FULL_GROUP_BY
SQL 模式时,查询中包含聚合函数(例如,SUM()
、COUNT()
)而没有对所有非聚合列进行分组。ONLY_FULL_GROUP_BY
模式要求所有非聚合列都必须在 GROUP BY
子句中进行分组,否则会报错。
解决方法
要解决此错误,有两种方法:
方法 1:修改 SQL 模式
可以通过修改 MySQL 配置文件(通常为 /etc/mysql/my.cnf
)中的 sql_mode
设置来禁用 ONLY_FULL_GROUP_BY
模式。将 sql_mode
设置为以下值之一:
STRICT_TRANS_TABLES
NO_ENGINE_SUBSTITUTION
ANSI
TRADITIONAL
更改 sql_mode
后,重新启动 MySQL 服务。
方法 2:修改查询
如果不想修改 SQL 模式,则可以修改查询以使其与 ONLY_FULL_GROUP_BY
兼容。有两种方法可以做到这一点:
- 对所有非聚合列进行分组:将所有未在
GROUP BY
子句中明确保含的非聚合列添加到GROUP BY
子句中。 - 使用子查询:将聚合查询放在内部子查询中,然后使用外部查询对子查询结果进行分组。子查询将确保对所有非聚合列进行隐式分组。
示例
错误查询:
SELECT SUM(salary)
FROM employees;
方法 1:修改 SQL 模式
# 在 my.cnf 中将 sql_mode 设置为 ANSI
[mysqld]
sql_mode=ANSI
方法 2:修改查询(对所有非聚合列进行分组)
SELECT SUM(salary)
FROM employees
GROUP BY department;
方法 2:修改查询(使用子查询)
SELECT SUM(salary)
FROM (
SELECT department, salary
FROM employees
) AS subquery
GROUP BY department;
以上就是Mysql8报错this is incompatible with sql_mode=only_full_group_by问题的详细内容,更多请关注编程学习网其它相关文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341