我继承了一个带有“sku”字段的表,它应该是唯一的,但是由于生成的sku生成方法失败,现在遍布了几十个副本。
我需要快速修复这些重复项(应用程序的其他部分在遇到这些重复记录时失败),方法是运行更新并将记录ID附加到SKU(暂时是此应用程序的有效解决方案)
我正在尝试运行:
UPDATE
main_product_table
SET sku = CONCAT(sku, '-', CAST(product_id as CHAR) )
WHERE sku IN (
SELECT sku FROM main_product_table
GROUP BY sku
HAVING COUNT(*) > 1
);
但我收到了:
您无法在FROM子句中为更新指定目标表'main_product_table'
有没有办法实现同样的目标? mysql是否抱怨我在更新和子查询中都有main_product_table
来获取重复项?
谢谢!
答案 0 :(得分:2)
试试这个:
UPDATE
main_product_table
SET sku = CONCAT(sku, '-', CAST(product_id as CHAR) )
WHERE sku IN (
select * from ( SELECT sku FROM main_product_table
GROUP BY sku
HAVING COUNT(*) > 1) as p
);
在内部查询中添加了表别名。