我已经在以下主题中找到了解决方案的一部分:
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行)的语法错误。
答案 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;