¿Cómo eliminar un sku duplicado a través de la base de datos?

12

Recibo este error cuando intento editar y guardar algunos de mis productos Magento a través del administrador: " El valor del atributo" SKU "debe ser único ".

Cuando veo mis productos en el administrador de Magento, no se encuentra un sku duplicado, pero cuando ejecuto una exportación de productos, de hecho, hay algunos productos con el mismo sku. En teoría, Magento nunca debería haber permitido que esto sucediera, pero, por desgracia, estoy tratando con un grupo de productos bastante grande y maduro (de más de 3 años) que parece llevar los restos de errores y peculiaridades anteriores de Magento.

Supongo que la única forma de solucionar este problema es eliminar manualmente uno de los skus duplicados de la base de datos, pero no estoy seguro de la mejor / más segura forma de hacerlo. Tengo casi 0 experiencia trabajando con bases de datos, por lo que agradezco cualquier ayuda.

Amanda
fuente

Respuestas:

7
  1. Haga una copia de seguridad de su catalog_product_entitytabla de base de datos ( consulte: /programming//a/6683000/4457531 )

  2. Compruebe si hay skus duplicados en la catalog_product_entitytabla con esta consulta:

    SELECT COUNT(*), sku
    FROM `catalog_product_entity`
    GROUP BY sku HAVING COUNT(*) > 1
  3. Eliminar entradas duplicadas

    • Elimine los nuevos productos duplicados y mantenga los sku más antiguos con:

      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
    • Para eliminar viejos productos duplicados y mantener la nueva SKU, sustituir MINporMAX en unirse a subconsulta

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

Tendrá que investigar y limpiar esos skus inesperados. Primero encuentre los skus en cuestión, luego deberá limpiarlos en la base de datos con la siguiente consulta:

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

Tenga en cuenta que le recomiendo que lo haga si está seguro de lo que hace, esto no será reversible.

Nicolas D
fuente
Tenga en cuenta para copia de seguridad de su base de datos antes de aplicar cualquier consulta directamente sensata
Nolwennig
1

Ejecute el siguiente script a través de la base de datos

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);
Abdul
fuente
Tenga en cuenta hacer una copia de seguridad de su base de datos antes de aplicar cualquier consulta sensata directamente
2016