更新主键 - 如果重复,则删除它

时间:2016-05-27 15:10:57

标签: mysql sql database sql-update duplicates

我试图从主键列中删除空格,如下所示:

update EMAILS set email = TRIM(email);

但是,如果剪裁的电子邮件是重复的,我只想删除它。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

没有一种很好的方法可以在单个查询中执行您的建议,因为MySQL并非真正设计用于容纳这样的情况,即初始主键数据在首先插入之前未正确清理。

我的建议是在此更新之前执行单独的查询,以识别和删除这些潜在记录。你可以这样做:

DELETE
FROM emails AS delete
INNER JOIN emails AS original
   ON TRIM(delete.email) = original.email
   AND delete.email <> original.email

这会从表中删除所有那些在修剪时会导致主键冲突的行。此查询可能需要一段时间才能运行,具体取决于表的大小,因为您无法利用基于TRIM()的JOIN条件的索引。