【问题标题】:Remove duplicates but leave null fields删除重复项但保留空字段
【发布时间】:2014-06-29 09:33:41
【问题描述】:

我已经在以下帖子中找到了部分解决方案:

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 行)的语法错误。

【问题讨论】:

  • 请提供您尝试过的sql。

标签: mysql


【解决方案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;

【讨论】:

  • 试过了,但只添加了实际包含电子邮件值的记录。电子邮件字段为空的记录不会被插入。
  • 不,还是一样的结果。
猜你喜欢
  • 2021-11-29
  • 1970-01-01
  • 2019-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-18
  • 2020-10-07
  • 1970-01-01
相关资源
最近更新 更多