mysql5.7部分group by语句不能正常执行,报only_full_group_by。。

问题重述:mysql5.7部分group by语句不能正常执行,报only_full_group_by。。
Error querying database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:
Expression #2 of SELECT list is not in GROUP BY clause  ; this is incompatible with sql_mode=only_full_group_by"

分析:出现这种问题的主要原因是,mysql5.7相较之前5.6更加严格了,如果在一个group by语句中,select后边的其它任务字段不能在group by后保持唯一,则会报上述错误,解决方案:
方案一:直接改sql57的配置,直接关掉这种模式,让它不进行这种模式的检查,这种方案适合于,老项目由sql56升级到sql57,这样不用改之前的代码,可以将影响降低到最小,具体的修改方法为:
在my.cnf的[mysqld]下面,加上如下配置:
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
这样的话,就不会开启only_full_group_by检查。。
方案二:如果是新写的项目,可以在写group by语句的时候,就让select后边的所有字段保持唯一,如:之前可能用的是select * ,新写的话,可以考虑,只select 特定有用的字段,如果这个字段不能保持唯一,可以采用select any_value(name), * * 这种形式。

注意:采用方案二,如果部署到mysql5.6以下的服务器上,可能会报,不支持any_value

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值