道者编程

mysql 5.7 GROUP BY问题

Mysql5.7使用ONLY_FULL_GROUP_BY检查GROUP BY的合法性,新的语法认为:如果GROUP BY的字段在SELECT中没有,则认为不合法,Mysql直接报错。如:

SELECT id from table GROUP BY id //合法
SELECT name from table GROUP BY id //报错

个人认为这种写法很坑,GROUP BY是根据某个字段聚合,SELECT 是提取的字段。但Mysql认为这样很可能会导致数据不一致,(以上第二条用id分组,但用的是未分组的name)

一般两种解决办法:

1:使用 any_value 函数

2:修改配置:

进入mysql控制台输入命令

mysql> select @@GLOBAL.sql_mode;

高亮图片就是ONLY_FULL_GROUP_BY,把这一行复制下来,去掉ONLY_FULL_GROUP_BY,复制到my.cnf下,比如我这里是:

#sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
 

注意前面没有set,一些介绍方法是sql_mode=STRICT_TRANS_TABLES……,set是在控制台输入命令,只对当前有效,一旦重启mysql则失效。

设置完之后重启即可


最新评论:
1楼 广东省 电信 发表于 2017-10-18 07:48:37
666666666666
2楼 浙江省 电信 发表于 2017-12-11 11:05:54
666666
共有 2 条记录  首页 上一页 下一页 尾页 1
我要评论:

看不清楚