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

时间:2016-07-29 21:13:11

标签: 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)。

“匹配”表示两行具有相同的“年份”,“文件”,“名称”,“语言”和“下载”。

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

2 个答案:

答案 0 :(得分:1)

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);

答案 1 :(得分:1)

将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

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