我使用了一些不同的查询来尝试完成此操作,但我似乎无法让它工作!
我想在此表中删除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个重复项我只需要删除它们!
答案 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
的行将被删除。