标签:FULL GROUP mysql ONLY mode sql
背景:
执行 group by 语句时,没有办法select * 出来所有的字段,以至于再对中间某些字段计算时无法推断,影响结果,具体如下:
报错内容
Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre
原因分析
mysql 5.7默认启用ONLY_FULL_GROUP_BY特性,即:对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中,也就是说查出来的列必须在group by后面出现否则就会报错,或者这个字段出现在聚合函数里面。
解决方法
在mysql的配置文件的最后强制设置sql_mode,把默认的ONLY_FULL_GROUP_BY去掉。
sql_mode的查看命令:select version(), @@sql_mode;
默认的sql_mode:ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
sql_mode的设置命令:
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
解决效果:
注意:单次有效,重新启动mysql后失效。
net stop mysql #windows 停止mysql服务
net start mysql #windows 启动mysql服
标签:FULL,GROUP,mysql,ONLY,mode,sql 来源: https://www.cnblogs.com/randamao666/p/16629241.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。