MySQL - 删除SELECT中找到的所有重复行

时间:2016-01-08 09:53:30

标签: mysql duplicates

我使用了一些不同的查询来尝试完成此操作,但我似乎无法让它工作!

我想在此表中删除100,000个重复的代码,每个代码都是唯一的,所以我需要保留原件!

我可以使用以下方式显示100,000个重复项:

delete from serialcodes group by code having count(*) > 1

然后我尝试删除使用:

DELETE FROM serialcodes WHERE serialcode_id IN (
    SELECT * FROM (
        SELECT serialcode_id FROM serialcodes GROUP BY code HAVING ( COUNT(code) > 1 )
    ) AS p
)

当浏览器中的内容耗尽并超时时,我尝试通过SSH运行但没有做任何事情。

有人可以帮忙吗?

编辑:我的结构

serialcodes_id    code
1                 ABC123456
2                 ABC123456
3                 IJFH87878
4                 OIJD87898

我想标记代码1和2是相同的并且只删除其中的一个,在整个表中,我的select语句正确地突出显示100,000个重复项我只需要删除它们!

3 个答案:

答案 0 :(得分:0)

这应该适合你:

DELETE FROM serialcodes WHERE serialcode_id NOT IN
 (SELECT serialcode_id FROM serialcodes GROUP BY code)

答案 1 :(得分:0)

使用IGNORE设置唯一索引。它会删除所有重复的行:

ALTER IGNORE TABLE序列码ADD UNIQUE INDEX代码(代码);

答案 2 :(得分:0)

LIMIT

这将删除DELETE s1 FROM serialcodes s1 JOIN serialcodes s2 ON (s1.code = s2.code AND s1.`serialcodes_id` > s2.`serialcodes_id`) 中包含重复serialcodes的行。行为code的行将被删除。