删除重复项但保留空字段

时间:2014-06-29 09:33:42

标签: mysql

我已经在以下主题中找到了解决方案的一部分:

Removing duplicate email address based on the lowest id in mysql

我有这个MYSQL表,其中还包含电子邮件地址,我希望删除重复项,以保留最高ID完整的副本。 还有许多空的电子邮件字段应该被忽略并因此保留。 之后,将来不允许对电子邮件域使用重复的条目。

我怎样才能做到这一点?我的脑袋绝对是在旋转,我可以把它搞定。 我想在phpmyadmin中执行此操作,因为它应该只是一次性操作。

来自以下链接:MySQL remove duplicates from big database quick

我试过了:

create table tmp like yourtable;

alter table tmp add unique (text1, text2);

insert into tmp select * from yourtable 
on duplicate key update text3=ifnull(text3, values(text3));

rename table yourtable to deleteme, tmp to yourtable;

drop table deleteme;

但是这给了我一个关于select *语句(第3行)的语法错误。

1 个答案:

答案 0 :(得分:1)

尝试:

insert into tmp (email) select X.email from ((SELECT email FROM yourtable WHERE LENGTH(email) = 0) UNION (SELECT email FROM yourtable WHERE LENGTH(email) > 0 GROUP BY email ORDER BY id DESC)) AS X;