我想删除除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行。
答案 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
这应该表现得很好,因为它基本上只是一个连接。