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

Remove duplicate rows in mysql, retaining only that with the lowest id

我想删除除 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)

"Matching" 表示两行具有相同的 'year'、'file'、'name'、'language' 和 'download'.

可能有 10 个以上的重复行。我想删除所有行,但保留最低 ID 行。

DELETE
  FROM myTable a
 WHERE EXISTS (SELECT b.id
               FROM   myTable b
               WHERE  a.year = b.year
                 AND  a.file = b.file
                 AND  a.name = b.name
                 AND  a.language = b.language
                 AND  a.download = b.download
                 AND  a.id > b.id);

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

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

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