码迷,mamicode.com
首页 > 数据库 > 详细

MySQL5.7默认打开ONLY_FULL_GROUP_BY模式问题与解决方案

时间:2019-07-04 11:08:44      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:聚合函数   doc   www   name   sql_mod   参考   field   sdn   code   

MySQL5.7后将sql_mode的ONLY_FULL_GROUP_BY模式默认设置为打开状态,这样一来,很多之前的sql语句可能会出现错误,错误信息如下:

Error Code: 1055. Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘××ב which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

描述:select的列都要在group中,或许本身是聚合列(SUM,AVG,MAX,MIN)才行

解决方案一:

这时我们可以通过navicat或workbench输入select @@global.sql_mode来查看当前数据库的sql_mode属性值

技术图片

复制查询结果,去掉ONLY_FULL_GROUP_BY,重新赋值,执行成功后,就可以将ONLY_FULL_GROUP_BY模式默认设置为关闭状态,解决之前的sql报错问题

set sql_mode = ‘STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION‘

但是这种方式设置的只是当前会话中的sql_model,服务器重启后,设置可能会失效。设置永久生效模式可参考博客:https://www.cnblogs.com/zenghui940/p/4361941.html

 

解决方案二:

MySQL有any_value(field)函数,他主要的作用就是抑制ONLY_FULL_GROUP_BY值被拒绝

官方有介绍,地址:https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html#function_any-value

我们可以把select语句中查询的属性(除聚合函数所需的参数外),全部放入any_value(field)函数中;

例如:select name,any_value(sex) from test_table group by name

这样sql语句不管是在ONLY_FULL_GROUP_BY模式关闭状态还是在开启模式都可以正常执行,不被mysql拒绝。

 

本人小白,如果表述的难以理解可查看博客:http://www.ywnds.com/?p=8184

 

原文地址:https://blog.csdn.net/Peacock__/article/details/78923479

MySQL5.7默认打开ONLY_FULL_GROUP_BY模式问题与解决方案

标签:聚合函数   doc   www   name   sql_mod   参考   field   sdn   code   

原文地址:https://www.cnblogs.com/jpfss/p/11130877.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!