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

标签 mysql sql database sql-update duplicates

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

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

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

关于mysql - 更新主键 - 如果重复,则将其删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37486886/

相关文章:

android - 使用 Android 强制关闭上传图片但仍在工作

Oracle 检查约束是否存在的 SQL

php - 从数据库中选择一个值

javascript - 如何进行数据完整性和错误处理?

mysql - 如何在插入值存在的地方替换主键?

sql - 在多个客户端之间的 postgres 中实现宽松约束

sql - 从 postgresql DB 中的 jsonb 列检索数据作为数组,返回空结果

MySQL 数据库重复唯一键

mysql - 如何在mysql中构建一个用于检测过期许可证的表?

mysql - 在 mysql 中的子查询之上创建 View