Mysql Update语句删除重复项

时间:2014-06-24 13:32:13

标签: mysql duplicates unique

我想对我的唯一ID进行更新,例如替换空格,但是在这种情况下,update语句由于冗余而中断,我尝试进行更新,但是  语法错误

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

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

1 个答案:

答案 0 :(得分:0)

没有ON DUPLICATE KEY语法是UPDATE语句的一部分。

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

您想要更新表中的列,以删除所有空格字符。当您尝试运行该语句时,语句遇到类似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语句删除这些行。