【工作问题】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.*,要什么字段取什么字段一般都不会报这个错。
推荐阅读
-
浅谈mysql密码遗忘和登陆报错的问题
-
关于mysql查询字符集不匹配问题的解决方法
-
浅谈mysql密码遗忘和登陆报错的问题
-
使用cmd运行mysql数据库的时候,报错:"不是内部命令也不是可有运行的程序"问题的解决办法
-
mysql报错1033 Incorrect information in file: ‘xxx.frm’问题的解决方法
-
Mysql5.7中使用group concat函数数据被截断的问题完美解决方法
-
MySql版本问题sql_mode=only_full_group_by的完美解决方案
-
Mysql升级到5.7后遇到的group by查询问题解决
-
[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause 的问题 MySQL
-
[MySQL] 测试where group by order by的索引问题