我想对我的唯一ID进行更新,例如替换空格,但是在这种情况下,update语句由于冗余而中断,我尝试进行更新,但是 语法错误
UPDATE __cat_product
SET product_id = REPLACE(product_id,' ','')
ON DUPLICATE KEY DELETE product_id
WHERE product_id LIKE "%A %"
如何以正确的方式做到这一点?
答案 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语句删除这些行。