0


this is incompatible with sql_mode=only_full_group_by问题

这个问题通常出现在MySQL数据库中,是因为MySQL的sql_mode设置为了only_full_group_by,这种模式下,在使用GROUP BY子句分组查询时,如果SELECT中的字段不在GROUP BY 中出现,那么这个查询就会报错。

解决这个问题有两种方法:

  1. 修改sql_mode设置:将only_full_group_by从sql_mode中删除或者将整个sql_mode设置为空,这样就可以避免报错。例如:SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

  2. 修改查询语句:将SELECT中的所有字段都添加到GROUP BY中。例如:SELECT column1, column2 FROM table_name GROUP BY column1, column2;

值得注意的是,修改sql_mode可能会影响其他查询的结果,所以最好只在需要时修改当前会话的sql_mode设置。

例如:

SELECT ifnull(m.major_nickname, '跨专业'), COUNT(studio_id) num
FROM t_studio s
LEFT JOIN t_major m ON s.major_name = m.major_name
WHERE s.studio_type_id = 3
GROUP BY s.major_name
ORDER BY m.major_nickname这句sql会报this is incompatible with sql_mode=only_full_group_by这个错误

解决方法,规范sql语句或

这个错误是MySQL在执行GROUP BY语句时的一个严格模式。它要求在SELECT查询子句中使用的所有字段,在GROUP BY子句中都必须出现,或者用聚合函数处理。这个错误通常发生在MySQL 5.7之后的版本。

如果您想要修复这个错误,可以尝试以下两种方法之一:

  1. 关闭strict模式

可以在MySQL配置文件my.cnf(Linux系统)或my.ini(Windows系统)中关闭strict模式。在[mysqld]部分添加如下代码:

[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION

然后重启MySQL服务即可。

  1. 修改SQL语句

修改SQL查询语句,将ifnull和order by语句中的m.major_nickname改为s.major_name。

例如:

SELECT ifnull(m.major_nickname, '跨专业'), COUNT(studio_id) num 
FROM t_studio s 
LEFT JOIN t_major m ON s.major_name = m.major_name
WHERE s.studio_type_id = 3
GROUP BY s.major_name, m.major_nickname
ORDER BY s.major_name


以上两种方法都可以解决这个问题。

标签: sql 数据库 mysql

本文转载自: https://blog.csdn.net/qq_74585474/article/details/130057108
版权归原作者 栗汐遥 所有, 如有侵权,请联系我们删除。

“this is incompatible with sql_mode=only_full_group_by问题”的评论:

还没有评论