我正在尝试从表nlt_user中删除电子邮件重复项 此查询正确显示具有重复项的记录:
select [e-mail], count([e-mail])
from nlt_user
group by [e-mail]
having count([e-mail]) > 1
现在如何删除所有重复但只有一个的记录? 谢谢
答案 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;