sql在MySQL8.0上出现“groupbydesc”语法错误,在5.7上可以

lzfw57am  于 2021-06-15  发布在  Mysql
关注(0)|答案(3)|浏览(706)

这种说法就像 SELECT * FROM db.table group by id desc; 会引发如下错误
15:02:24从db.table group按id desc limit 0选择*10错误代码:1064。sql语法有错误;检查与您的mysql服务器版本对应的手册,了解在第10.00014行的“desc limit 0,10”附近使用的正确语法
在ubuntu 18.04桌面版64位的mysql 8.0.13上
在windows、centos或ubuntu的MySQL5.7上,哪一个更好。
我基本上知道,select语句是这样的。

SELECT statement... [WHERE condition | GROUP BY `field_name(s)` HAVING condition] ORDER BY `field_name(s)` [ASC | DESC];

所以这是5.7的问题,不发出错误吗?
或者更复杂的sql标准?

slhcrj9b

slhcrj9b1#

这个查询毫无意义:

SELECT *
FROM db.table 
GROUP BY id DESC;

您正在执行聚合查询。因此(大概),表中每个行有多个行 id . 这些被浓缩成一排。其他列应该使用什么值?很遗憾mysql曾经支持这种语法。所以一个可喜的变化是 ONLY_FULL_GROUP_BY 现在是默认值。
一个小提示是,使用没有聚合函数的聚合查询是可疑的。
也许你想要:

select id, min(col1), min(col2), . . .
from t
group by id;

或者更可能的情况是,您需要一个特定的行,例如“最早的”或“最近的”,例如:

select t.*
from t
where t.createdAt = (select min(t2.createdAt) from t t2 where t2.id = t.id);
kokeuurv

kokeuurv2#

我也有同样的问题,所以对于mysql 8,我使用了如下sql:

SELECT * FROM db.table 
group by id 
order by id desc
7xzttuei

7xzttuei3#

摘自@p.salmon对问题的评论。
如果在手册中查找select语句http://dev.mysql.com/doc/refman/5.7/en/select.html 你会看到高达5.7 asc|desc 是的可选修饰符 group by 语句,如果您查看升级文档https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-sql更改此不赞成意见已记录在案。
既然是这种情况,@李琳达的回答可能是个不错的选择。

相关问题