使用update语句修复mysql表中的重复字段

时间:2016-01-20 08:38:05

标签: mysql duplicates

我继承了一个带有“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来获取重复项?

谢谢!

1 个答案:

答案 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
);

在内部查询中添加了表别名。