德莱特只有一份重复记录

时间:2016-01-27 10:21:47

标签: mysql sql

我正在尝试从表nlt_user中删除电子邮件重复项 此查询正确显示具有重复项的记录:

select [e-mail], count([e-mail])
from nlt_user
group by [e-mail]
having count([e-mail]) > 1

现在如何删除所有重复但只有一个的记录? 谢谢

3 个答案:

答案 0 :(得分:2)

如果MySQL版本优先于5.7.4,您可以使用UNIQUE关键字在列电子邮件中添加IGNORE索引。 这将删除所有重复的电子邮件行:

ALTER IGNORE TABLE nlt_user
ADD UNIQUE INDEX idx_e-mail (e-mail);

如果> 5.7.4您可以使用临时表(IGNORE上不能再使用ALTER):

CREATE TABLE nlt_user_new LIKE nlt_user;
ALTER TABLE nlt_user_new ADD UNIQUE INDEX (emailaddress);
INSERT IGNORE INTO nlt_user_new SELECT * FROM nlt_user;
DROP TABLE nlt_user;
RENAME TABLE nlt_user_new TO nlt_user;

答案 1 :(得分:1)

试试这个:

delete n1 from nlt_user n1
inner join nlt_user n2 on n1.e-mail=n2.e-mail and n1.id>n2.id;

这将记录重复的最小ID值并删除剩余的重复记录

答案 2 :(得分:0)

秩功能可用于仅保留唯一值

1:创建一个仅包含唯一值的新表

示例:nlt_user_unique

CREATE TABLE  nlt_user_unique AS
(SELECT * FROM
(SELECT A.*,RANK() OVER (PARTITION BY email ORDER BY email) RNK 
 FROM nlt_user A)
 where RNK=1)

2:截断包含重复的原始表格

truncate table nlt_user

3:将步骤1中创建的表中的唯一行插入表nlt_user

INSERT INTO nlt_user()
SELECT email from nlt_user_unique;