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