Поиск и удаление дубликатов в MySQL

Люба х...ня

Встретился с проблемой. По одному из наших проектов поступил тикет с текстом: "Не обновляются цены для товара с артикулом 63072 m". Это интернет-магазин автозапчастей с автоматическим импортом товаров из xls данных, который мы делали пол столетия назад.

В процессе поиска проблемы заметил, что в базе присутствуют дубли товаров. Понял, что отсутствует уникальный индекс по колонке "Артикул". Но сейчас его уже не проставиш, так как присутствуют дубли.

Решение:

Создать временную таблицу и записать в нее уникальные идентификаторы товаров, а потом на ее основе удалить дубли из основной таблицы.

А теперь код.

CREATE TEMPORARY TABLE `p_temp`
  as  (
    SELECT min(product_id) as id
    FROM `wm_products`
    GROUP BY product_code
  );

DELETE from `wm_products`
WHERE `wm_products`.product_id not in (
  SELECT id FROM p_temp
);

ALTER TABLE `wm_products` ADD UNIQUE (
  `product_code`
);

Таким образом я почистил таблицы от мусора. Далее в скрипте импорта я нашел ошибку и исправил ее.

Надеюсь, вам также пригодится.

Расскажите нам о своем проекте!