欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-12 08:38:38
...

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.*,要什么字段取什么字段一般都不会报这个错。

相关标签: Problems