关于sql_mode=only_full_group_by报错

发布时间:2017-07-04 浏览次数:5166 文章来源:个人博客

在用mysql5.7.x版本时候,发现以前的group by语句都报错了。

this is incompatible with sql_mode=only_full_group_by

这是因为5.7版本默认是开启only_full_group_by的,也就是group_by的严格模式


一般来说:

select 选取分组中的列+聚合函数 from 表名称 group by 分组的列 

对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的。


举个例子:

id
a
b
1
av
bv
2
av
bvv
3
avv
bvvv

这个表

对于:SELECT a,b FROM table GROUP BY a

这个sql语句来说,目的是合并a列相同的,以往是能够执行的,b的结果是bv。

但是现在严格模式下,是无法执行的,因为如果id=1和id=2两个行合并,那么b的值是什么?bv还是bvv?

这就有问题了,所以就会报错误了。


至于怎么样解决呢?可以去掉select中的b,或者在group by 中加上b。还是根据需求来,看看这个b执行sql的意义吧。


还有,可以关掉only_full_group_by这个。

key-word
only_full_group_by 分组报错 only_full_group_by报错