【工作问题】Mysql的Group By查询报错问题

Mysql的Group By查询报错问题

最近用FineReport弄了几个报表,原先在测试数据库环境下跑的溜溜的,结果一切到正式数据库,报错了:

ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause 
and contains nonaggregated column 'test.user.user_id' which is not 
functionally dependent on columns  in GROUP BY clause; this is 
incompatible with sql_mode=only_full_group_by

遇到看不懂的错,Google大法准没错:

MySQL 5.7.5及以上功能依赖检测功能。如果启用了ONLY_FULL_GROUP_BY SQL模式(默认情况下),MySQL将拒绝选择列表,HAVING条件或ORDER BY列表的查询引用在GROUP BY子句中既未命名的非集合列,也不在功能上依赖于它们。

所以只要不启用这个模式,问题就解决了。
解决方案如下:
1、Navicat命令行直接修改:

select @@global.sql_mode;

可以看到有个ONLY_FULL_GROUP_BY,接下来直接执行更新语句

set @@global.sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION'

2、上面的方法如果数据库重启,会再次读取数据库默认配置文件myini,也就是sql_mode会再次回到ONLY_FULL_GROUP_BY模式,所以修改Mysql的数据库配置文件:需DBA配合
3、其实最根本的方法就是重写一下SQL语句,上面都是治标不治本的,不要写出像SELECT a.* , b.*,要什么字段取什么字段一般都不会报这个错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值