如何通过数据库删除重复的SKU?


12

尝试通过管理员编辑和保存一些Magento产品时出现此错误:“ 属性“ SKU”的值必须是唯一的。“

当我在Magento管理员中查看我的产品时,找不到重复的sku,但是当我运行产品导出时,实际上实际上有些产品具有相同的sku。从理论上讲,Magento绝对不应该允许这种情况发生,但是,las,我要处理的是相当大且成熟(3岁以上)的产品组,这些产品似乎带有以前的Magento错误和怪癖。

我猜想解决此问题的唯一方法是从数据库中手动删除重复的草图之一,但是我不确定执行此操作的最佳/最安全方法。我有0位使用数据库的经验,所以能提供任何帮助。

Answers:


7
  1. 备份您的catalog_product_entity数据库表(见:/programming//a/6683000/4457531

  2. catalog_product_entity使用此查询检查表中是否存在重复的skus :

    SELECT COUNT(*), sku
    FROM `catalog_product_entity`
    GROUP BY sku HAVING COUNT(*) > 1
    
  3. 删除重复的条目

    • 删除新的重复产品,并保留旧的 sku:

      DELETE catalog_product_entity FROM catalog_product_entity
      LEFT OUTER JOIN (
          SELECT MIN(entity_id) as id, sku
          FROM catalog_product_entity
          GROUP BY sku
      ) as t1
      ON catalog_product_entity.entity_id = t1.id
      WHERE t1.id IS NULL
      
    • 删除旧的重复产品并保留新的 sku,请在join子查询中替换MINMAX

      LEFT OUTER JOIN (
          SELECT MAX(entity_id) as id, sku
          ...
      )
      


1

您将需要调查并清理那些意外的问题。首先找到相关的skus,然后需要使用以下查询在数据库中对其进行清理:

DELETE FROM `catalog_product_entity` WHERE `sku` IN ('SKU1', 'SKU2', ..., 'SKU1654');

请注意,如果您确定要做什么,我建议您这样做,这将是不可逆的。


在直接应用任何明智的查询之前,请记住备份您的数据库
Nolwennig

1

请通过数据库运行波纹管脚本

DELETE FROM `catalog_product_entity` WHERE `entity_id` IN (SELECT *  FROM (SELECT `entity_id` FROM `catalog_product_entity` GROUP BY `sku` HAVING (COUNT(*) > 1)) AS A);

在直接应用任何明智的查询之前,请记住备份您的数据库
Nolwennig
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.