删除mysql中的重复行,只保留id最低的行
我想删除除删除mysql中的重复行,只保留id最低的行,mysql,sql-delete,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
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行。使用mysql的多表删除语法和自连接:
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);
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
这应该执行得很好,因为它本质上是一个单连接。是的。保持最低id行将不起作用…是的,
*
位错误我运行了该命令,但它需要很多时间。我有一个超过200万行的大型数据库。@jaki在任何一个非id列上放置了一个索引,该列具有最多的不同值。如果不同值的数量小于约100,则在两列上建立索引,第二列为非id列,不同值的数量位居第二。我考虑逐个手动运行代码,而不是同时运行所有代码。如果文件为“a”,则检查并删除文件为“a”的所有重复项。将代码放在哪里?@jaki将其添加到末尾:和a.file='a'
谢谢您的帮助