mysql5.7遇到group_by解决方法

原因

mysql 5.7 模式中。默认启用了ONLY_FULL_GROUP_BY。

ONLY_FULL_GROUP_BY是MySQL提供的一个sql_mode,通过这个sql_mode来提供SQL语句GROUP BY合法性的检查。

解决

set  SESSION  sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION;

这样可以修改一个会话的配置项,在其他会话中是不生效的。

set  GLOBAL  sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTIO4;

这样可以修改整个工作环境的配置。

select @@GLOBAL.sql_mode;

select @@SESSION.sql_mode;

修改完通过上面两条sql进行查询,就会看到ONLY_FULL_GROUP_BY这个没有了。

但还是建议使用ANY_VALUE()这个函数,因为上述方法重启mysql后就无效,MySQL提供ANY_VALUE()函数来抑制ONLY_FULL_GROUP_BY值被拒绝。

SELECT 
    province_code,
    any_value(province_name)
FROM t_mip_base_area
GROUP BY province_code;
posted @ 2020-09-18 14:01  老巷枯井  阅读(462)  评论(1)    收藏  举报