Mysql 更新主键-如果重复,则将其删除

Mysql 更新主键-如果重复,则将其删除,mysql,sql,database,sql-update,duplicates,Mysql,Sql,Database,Sql Update,Duplicates,我正在尝试删除主键列中的空格,如下所示: update EMAILS set email = TRIM(email); 但是,如果修剪后的电子邮件是重复的,我只想删除它。有什么方法可以做到这一点吗?在单个查询中没有一个很好的方法可以实现您的建议,因为MySQL的设计并不能真正适应这样的情况,即初始主键数据在插入之前没有被正确清理 我的建议是在更新之前执行一个单独的查询,以识别和删除这些潜在的记录。你可以这样做: DELETE FROM emails AS delete INNER JOIN e

我正在尝试删除主键列中的空格,如下所示:

update EMAILS set email = TRIM(email);

但是,如果修剪后的电子邮件是重复的,我只想删除它。有什么方法可以做到这一点吗?

在单个查询中没有一个很好的方法可以实现您的建议,因为MySQL的设计并不能真正适应这样的情况,即初始主键数据在插入之前没有被正确清理

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

DELETE
FROM emails AS delete
INNER JOIN emails AS original
   ON TRIM(delete.email) = original.email
   AND delete.email <> original.email
删除
从电子邮件中删除
内部连接电子邮件为原始邮件
修剪时(删除.email)=原始.email
并删除.email original.email
这将从表中删除所有在修剪时会导致主键冲突的行。根据表的大小,此查询可能需要一段时间才能运行,因为您将无法利用基于
TRIM()
的联接条件的索引