this is incompatible with sql_mode=only_full_group_by问题

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 in***patible with sql_mode=only_full_group_by这个错误

解决方法,规范sql语句或

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

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

1. 关闭strict模式

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

```
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION
```



然后重启MySQL服务即可。

2. 修改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
``` 

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

 

 

 

 

转载请说明出处内容投诉
CSS教程_站长资源网 » this is incompatible with sql_mode=only_full_group_by问题

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买