Поиск и удаление дубликатов в MySQL
- 12 Февраля 2015
- Volodymyr Hodiak
- Разработка
- 5058
Встретился с проблемой. По одному из наших проектов поступил тикет с текстом: "Не обновляются цены для товара с артикулом 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` );
Таким образом я почистил таблицы от мусора. Далее в скрипте импорта я нашел ошибку и исправил ее.
Надеюсь, вам также пригодится.