【问题标题】:Mysql Update statement to delete duplicatesMysql Update 语句删除重复项
【发布时间】:2014-06-24 13:32:12
【问题描述】:

我想对我的唯一 ID 进行更新,例如替换空格,但在这种情况下,更新语句会因为多余的 s 而中断,我尝试按如下方式进行更新,但是 语法错误

UPDATE __cat_product 
SET product_id = REPLACE(product_id,' ','')
ON DUPLICATE KEY DELETE product_id
WHERE product_id LIKE "%A %"

如何以正确的方式做到这一点?

【问题讨论】:

  • 认为您需要将其作为 2 个语句来执行。一个负责更新,一个负责删除。
  • 更新不会在重复会中断

标签: mysql duplicates unique


【解决方案1】:

UPDATE 语句中没有 ON DUPLICATE KEY 语法。

我很难弄清楚你真正想要做什么。

您想更新表中的列,以删除所有空格字符。当您尝试运行该语句时,该语句遇到了类似Duplicate entry 'foo' for key 'PRIMARY' 的错误。

假设product_id 是varchar,试试这个大小:

UPDATE __cat_product t
  JOIN ( SELECT MAX(s.product_id) AS product_id
              , REPLACE(s.product_id,' ','')
           FROM __cat_product s
          WHERE s.product_id LIKE '%A %'
            AND NOT EXISTS ( SELECT 1
                               FROM __cat_product d
                              WHERE d.product_id = REPLACE(s.product_id,' ','')
                            )
          GROUP BY REPLACE(s.product_id,' ','')
       ) r
    ON r.product_id = t.product_id
   SET t.product_id = REPLACE(t.product_id,' ','')

别名为 r 的内联视图获取实际上可以更新的 product_id 的值,因为表中不存在“更新的”product_id 值。 GROUP BY 确保每个目标替换值我们只获得一个 product_id

表中可能仍有与谓词product_id LIKE '%A %' 匹配的行。在不引发重复键异常的情况下,无法从这些行的 product_id 列中删除空格。

可以使用单独的 DELETE 语句删除这些行。

【讨论】:

    猜你喜欢
    • 2021-07-26
    • 2018-06-16
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    • 2010-10-25
    • 1970-01-01
    相关资源
    最近更新 更多