原因
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