错误

执行复杂sql(我是多表连接查询和group by分组一起使用)语句时,报以下错误

1
translate SQLException with Error code '1055'

原因

mysql5.7后,sql_mode中默认存在ONLY_FULL_GROUP_BY(不要让GROUP BY部分中的查询指向未选择的列),对 group by 用法的规定,select 的字段只能是group by的字段。或者需要加聚合函数的。

解决

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#在数据库中执行以下语句
SELECT @@global.sql_mode #查询sql_mode

#ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
#ONLY_FULL_GROUP_BY   不要让GROUP BY部分中的查询指向未选择的列  
#STRICT_TRANS_TABLES 为事务存储引擎启用严格模式,也可能为非事务存储引擎启用严格模式
#NO_ZERO_IN_DATE 在严格模式,不接受月或日部分为0的日期
#NO_ZERO_DATE 在严格模式,不将 '0000-00-00'做为合法日期
#ERROR_FOR_DIVISION_BY_ZERO 在严格模式,在INSERT或UPDATE过程中,如果被零除(或MOD(X,0)),则产生错误  
#NO_AUTO_CREATE_USER 防止GRANT自动创建新用户,除非还指定了密码
#NO_ENGINE_SUBSTITUTION 如果需要的存储引擎被禁用或未编译,可以防止自动替换存储引擎

#去掉ONLY_FULL_GROUP_BY 执行以下语句
set global sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'

#重启项目问题解决

注:

能不修改尽量不修改,一般这个是你使用group by分组后,在查出的数据中被分到同一组的数据的有其它字段不相同,可将这字段加入分组条件解决

END