MySQL5.7+group by报错only_full_group_by解决方案

今天和老师在做项目的时候写了一句SQL,在教室的数据库环境中MySQL5.1中并没有报错。
select ordernum,createtime,status from orderlist where isdelete = 0 and uid = {$uid} group by ordernum order by createtime desc

总所周知,MySQL数据库有一定的不严谨(指的是老版本)。所以针对这些老版本也确实出现了不少的非主流写法(在此是指别的数据库会报错的SQL)。

然而我本机的数据库环境是Mysql5.7的所以在运行的时候出现了报错,让我一脸懵逼。

后来发现是mysql 5.7以后的版本数据库的默认模式设置成了  only_full_group_by模式,而在执行的sql里有一些重复的行group by 的时候mysql 不知道选择哪一个行。

那么知道问题了我当时就想到了两种方式。

方法一:关闭only_full_group_by模式

语句如下:

set @@global.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模式

如果要还原则执行

set @@global.sql_mode   ='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
方法二:优化SQL语句~

........我不会~我(暂时)是MySQL小白(只为完成查询任务,并不考虑最优解)。


版权声明:若无特殊注明,本文为《周小雨》原创,转载请保留文章出处。
本文链接:https://zxyy.me/post-166.html
正文到此结束

热门推荐

管理员已关闭本篇文章评论!