这个问题通常出现在MySQL数据库中,是因为MySQL的sql_mode设置为了only_full_group_by,这种模式下,在使用GROUP BY子句分组查询时,如果SELECT中的字段不在GROUP BY 中出现,那么这个查询就会报错。
解决这个问题有两种方法:
修改sql_mode设置:将only_full_group_by从sql_mode中删除或者将整个sql_mode设置为空,这样就可以避免报错。例如:SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
修改查询语句:将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之后的版本。
如果您想要修复这个错误,可以尝试以下两种方法之一:
- 关闭strict模式
可以在MySQL配置文件my.cnf(Linux系统)或my.ini(Windows系统)中关闭strict模式。在[mysqld]部分添加如下代码:
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION
然后重启MySQL服务即可。
- 修改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
以上两种方法都可以解决这个问题。
版权归原作者 栗汐遥 所有, 如有侵权,请联系我们删除。