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