原因
SELECT 列表的表达式结果不在 GROUP BY 子句中,或者 GROUP BY 子句中值和结果不匹配
如下图列表是四个值但是group by只有一个值这种情况:
解决方法:
临时方案
查询sql_mode:
sql客户端执行下面语句:
select @@session.sql_mode;
查出的值,删除ONLY_FULL_GROUP_BY,或者直接使用下面sql重新设置sql_mode
set @@global.sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
但是此方法mysql重启后可能会恢复
永久方法
找到my.***f,修改配置文件my.***f
Windows操作系统中的MySQL配置文件是“my.ini”,位置一般在MySql安装的根目录下,也有可能在隐藏文件夹“ProgramData”下面;而Linux操作系统中的MySQL配置文件是“my.***f”,位置一般在“/etc/my.***f”或“/etc/mysql/my.***f”目录下
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
重启mysql即可。service mysqld restart