Удаление дубликатов из таблицы
Доброго времени суток всем! Возникла такая необходимость как почистить записи в бд от дубликатов. например от такого:
52742231006,Хилс 2310 IB кон.д/собак Курица/Овощи 363г.
52742341705,Хиллс 3227 IB кон.дсобак Индейка/Овощи 363г
52742231006,Хилс 2310 IB кон.д/собак Курица/Овощи 363г.
52742419909,Хиллс 4199 NB сух.д/кошек Тунец/Овощи 2кг
52742419909,Хиллс 4199 NB сух.д/кошек Тунец/Овощи 2кг
Основная полезная информация это
- Штрих-код
- Наименование позиции Остальное мета информация Дата создания, рейтинг, единица измерения и прочее. Айдишников нет.
Для поиска дубликатов использую следующую конструкцию
SELECT barcode, product_name, count(product_name) FROM barcodes_catalog GROUP BY barcode, product_name HAVING count( * ) > 1;
В результате получаю вывод такого вида
52742231006,Хилс 2310 IB кон.д/собак Курица/Овощи 363г.,3
52742341705,Хиллс 3227 IB кон.дсобак Индейка/Овощи 363г,3
52742419909,Хиллс 4199 NB сух.д/кошек Тунец/Овощи 2кг,3
52742526607,Корм для кошек Хилс курица овощи 300 г,3
52742526805,Корм для кошек Хилс тунец овощи 300 г,3
Перелопатив большое количество примеров и заглянув в доку, к сожаления не нашел варианта решения задачи. Заранее большое СПАСИБО за любую информацию и уделенное время =).
Ответы (1 шт):
Автор решения: Akina
→ Ссылка
- Добавьте синтетический первичный индекс:
ALTER TABLE barcodes_catalog ADD COLUMN id BIGINT AUTO_INCREMENT PRIMARY KEY;
- Удалите дубликаты:
DELETE t1
FROM barcodes_catalog t1
JOIN barcodes_catalog t2 USING (barcode)
WHERE t1.id > t2.id;
- Удалите созданный синтетический первичный индекс и создайте естественный по
barcode:
ALTER TABLE barcodes_catalog DROP COLUMN id, ADD PRIMARY KEY (barcode);