1.问题出现原因
MySQL 5.7,实现检测功能的依赖。如果启用了ONLY_FULL_GROUP_BY
SQL模式(默认),MySQL
拒绝选择列表查询,条件,或命令列表是指非聚合列既不是GROUP BY
子句中指定功能也不依赖他们。(5.7之前,MySQL
不检测功能的依赖和ONLY_FULL_GROUP_BY
在默认情况下不启用。 ONLY_FULL_GROUP_BY
,对于GROUP BY
聚合操作,如果在SELECT
中的列,没有在GROUP BY
中出现,那么这个SQL
是不合法的,因为列不在GROUP BY
从句中,也就是说查出来的列必须在GROUP BY
后面出现否则就会报错,或者这个字段出现在聚合函数里面。
2.解决方案
使用select @@GLOBAL.sql_mode
,查看ONLY_FULL_GROUP_BY
是否启用,如下
select @@global.sql_mode;
拿到查询到的数据,去掉里面的 ONLY_FULL_GROUP_BY
模式,然后set
回去
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 sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';