首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将过时的MySQL ` `SELECT * FROM table GROUP BY COLUNN1`查询转换为正确的MySQL 8语法?

如何将过时的MySQL ` `SELECT * FROM table GROUP BY COLUNN1`查询转换为正确的MySQL 8语法?
EN

Stack Overflow用户
提问于 2020-03-10 05:21:45
回答 1查看 43关注 0票数 0

我正在尝试将旧的5.6 MySQL查询转换为与MySQL 8兼容。不幸的是,许多查询都包含与SELECT * FROM table GROUP BY column1的连接。这会导致最新版本的mysql出现语法错误。我尝试了group by和distinct的几种变体,试图实现相同的行为,但都没有成功。

EN

回答 1

Stack Overflow用户

发布于 2020-03-10 05:22:58

以下是一种方法:

代码语言:javascript
复制
select t.*
from (select t.*,
             row_number() over (partition by column1 order by column1) as seqnum
      from t
     ) t
where seqnum = 1;

这确实会返回一个额外的列,但在其他方面是等效的。

如果您的表有一个主键,比如id,那么您还可以这样做:

代码语言:javascript
复制
select t.*
from t
where t.id = (select min(t2.id)
              from t t2
              where t2.column1 = t.column1
             );

注意:有些人在假设MySQL将为每个column1值返回第一行的情况下编写了类似您的代码。这是对SQL的严重误解,因为SQL表表示无序集合,所以甚至没有定义"first“。MySQL文档也告诫不要做出这样的假设。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60608523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档