this is incompatible with sql_mode=only_full_group_by问题

当MySQL的sql_mode设置为ONLY_FULL_GROUP_BY时,使用GROUPBY查询需保证SELECT中的字段都在GROUPBY中或使用聚合函数。解决方法包括修改sql_mode设置或调整查询语句。关闭strict模式或在查询中包含所有SELECT字段可避免该错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个问题通常出现在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服务即可。

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
``` 

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

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值