怎样找出并安全清理重复记录?
查看完整题解
参考回答
直接回答
先明确哪些列定义重复,按这些列分组找重复。再确定稳定的保留规则,例如保留最小主键。先用查询预览受影响记录,再分批或在可控事务内删除。
讲清原理
同名不一定代表同一人。NULL 和排序规则会影响分组及匹配,删除连接要与选重复时的规则一致。清理后应补能表达业务唯一性的约束。
例子与易错点
例如邮箱非空且约定相同邮箱只保留最早记录,可以按邮箱匹配并保留较小主键。对生产数据先核对外键依赖和受影响数量。
演示表中邮箱非空。先找重复邮箱,再保留较小主键。
CREATE TABLE duplicates (id INT PRIMARY KEY, email VARCHAR(100) NOT NULL);
INSERT INTO duplicates VALUES (1, 'a@example.test'), (2, 'a@example.test'), (3, 'b@example.test');
SELECT email, COUNT(*) FROM duplicates GROUP BY email HAVING COUNT(*) > 1;
DELETE d FROM duplicates AS d
JOIN duplicates AS kept ON kept.email = d.email AND kept.id < d.id;
SELECT id FROM duplicates ORDER BY id;
相关题 · 第 89 题
这道题,你掌握得怎么样?
掌握程度由你主动标记,阅读和收藏不会自动改变状态。