我正在尝试将旧的5.6 MySQL查询转换为与MySQL 8兼容。不幸的是,许多查询都包含与SELECT * FROM table GROUP BY column1的连接。这会导致最新版本的mysql出现语法错误。我尝试了group by和distinct的几种变体,试图实现相同的行为,但都没有成功。
发布于 2020-03-10 05:22:58
以下是一种方法:
select t.*
from (select t.*,
row_number() over (partition by column1 order by column1) as seqnum
from t
) t
where seqnum = 1;这确实会返回一个额外的列,但在其他方面是等效的。
如果您的表有一个主键,比如id,那么您还可以这样做:
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文档也告诫不要做出这样的假设。
https://stackoverflow.com/questions/60608523
复制相似问题