Пошук і видалення дублікатів в 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`
);

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

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

Розкажіть нам про свій проект!