mysql - 删除mysql中的重复行,仅保留具有最低id的行

标签 mysql sql-delete

我想删除除 id 之外所有列中具有相同值的所有行(id 最低的行除外)。
鉴于此数据:

id year file name language download
1  2014  a    x     h        d
2  2014  a    c     i        d
3  2014  a    x     h        d
4  2014  a    x     h        d
5  2015  b    y     j        d
6  2015  b    y     j        d
7  2015  b    y     j        d

这里我想删除 3 和 4(留下 1 - 最低的 id),并删除 6、7(留下 5)。

“匹配”表示两行具有相同的“年份”、"file"、“名称”、“语言”和“下载”。

可能有超过 10 个重复行。我想删除所有行,但保留最低 id 行。

最佳答案

使用 mysql 的多表删除语法和自连接:

delete b
from mytable a, mytable b
where b.year = a.year
and b.file = a.file
and b.name = a.name
and b.language = a.language
and b.download = a.download
and b.id > a.id -- this condition picks the higher id(s) for deletion

这应该表现得很好,因为它本质上是一个单一的连接。

关于mysql - 删除mysql中的重复行,仅保留具有最低id的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38667570/

相关文章:

mysql - 避免 SELECT 查询中的冗余表达式

sql-server - 批量删除数据 - Azure SQL Server

sql - 如何从 postgresql sql 表中删除重复行

sql - 从表中删除 a = b 和 b = a 的记录

MySQL:在 SELECT 语句上将整数加 1

mysql - 无法安装 MySQL-Python

mysql - 根据先前删除的子行删除父行

oracle - 更新 SQL : how to update several times the same line

php - 使用 php 的 MySQL 错误

java - 当key属性在子表+spring mvc和hibernate中时如何过滤数据