我的表中有511个重复项,我需要删除这些项,但不删除原始项。因此,我想删除每个重复项的每二次出现。
我该如何做到这一点?
表格:
code / status / time
E3F4FF928A / 0 /
07D95444BB / 0 /
07D95444BB / 0 /
40006C128F / 0 / 1315293012
2B45790E52 / 0 /
40006C128F / 0 / 1315293012
我的表中有511个重复项,我需要删除这些项,但不删除原始项。因此,我想删除每个重复项的每二次出现。
我该如何做到这一点?
表格:
code / status / time
E3F4FF928A / 0 /
07D95444BB / 0 /
07D95444BB / 0 /
40006C128F / 0 / 1315293012
2B45790E52 / 0 /
40006C128F / 0 / 1315293012
alter ignore table X add unique index (column_a)
unique index (col1, col2, col3)
中即可。 - JohanDELETE FROM table where code=x and status=y and time=z LIMIT 1;
这将删除符合给定条件的第一行(如果您有n个重复项,则将n-1放入以仅保留一个)。
DELETE t2 FROM table1 t2
INNER JOIN table1 t1 ON
(t1.somefield = t2.somefield
AND t1.otherfield = t2.otherfield /*add more fields if need be */
AND t2.id > t1.id)
LEFT JOIN table1 t3 ON
(t1.somefield = t3.somefield
AND t1.otherfield = t3.otherfield /*add more fields if need be */
AND t3.id > t2.id)
WHERE (t3.id IS NULL)
ORDER BY t2.id ASC
这应该只删除第二个重复项,保留第三个及以后的重复项。
如果您想要更简单的方法,并且您有一个时间戳列,也许您想要执行以下操作:
DELETE t2 FROM table1 t2
INNER JOIN table1 t1 ON
(t1.somefield = t2.somefield
AND t1.otherfield = t2.otherfield /*add more fields if need be */
AND t2.`timestamp` > t1.`timestamp`)
WHERE (1=1) /*In some mode(s) MySQL requires a where clause with delete*/
ORDER BY t2.id ASC