当前位置: 移动技术网 > 科技>操作系统>Linux > 解决大于5.7版本mysql的分组报错Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'userinfo.

解决大于5.7版本mysql的分组报错Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'userinfo.

2019年10月31日  | 移动技术网科技  | 我要评论

韩寒青春语录,何一轩,九年级上册英语视频

前言:

  借鉴网址:

原因:

   mysql 5.7.5和up实现了对功能依赖的检测。如果启用了only_full_group_by sql模式(在默认情况下是这样),那么mysql就会拒绝选择列表、条件或顺序列表引用的查询,这些查询将引用组中未命名的非聚合列,而不是在功能上依赖于它们。(在5.7.5之前,mysql没有检测到功能依赖项,only_full_group_by在默认情况下是不启用的。关于前5.7.5行为的描述,请参阅mysql 5.6参考手册。)

  执行以下个命令,可以查看 sql_mode 的内容:  

1 mysql> show session variables;
2 mysql> show global variables;
3 mysql> select @@sql_mode;
4 
5 可见session和global 的sql_mode的值都为:
6 only_full_group_by,strict_trans_tables,no_zero_in_date,no_zero_date,error_for_division_by_zero,no_auto_create_user,no_engine_substitution
7 
8 only_full_group_by说明:
9 only_full_group_by :使用这个就是使用和oracle一样的group 规则, select的列都要在group中,或者本身是聚合列(sum,avg,max,min) 才行,其实这个配置目前个人感觉和distinct差不多的,所以去掉就好

解决:

  

set global 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 session sql_mode='strict_trans_tables,no_zero_in_date,no_zero_date,error_for_division_by_zero,no_auto_create_user,no_engine_substitution';

  

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网