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