【问题标题】:Update primary key - if duplicate, then delete it更新主键 - 如果重复,则删除它
【发布时间】:2016-09-25 23:52:06
【问题描述】:

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

update EMAILS set email = TRIM(email);

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

【问题讨论】:

    标签: mysql sql database sql-update duplicates


    【解决方案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 条件利用索引。

    【讨论】:

      猜你喜欢
      • 2017-04-14
      • 1970-01-01
      • 2013-03-02
      • 2011-02-05
      • 2011-11-20
      • 2013-01-09
      • 2017-02-12
      • 2011-11-05
      • 1970-01-01
      相关资源
      最近更新 更多