Удаление дубликатов из таблицы

Доброго времени суток всем! Возникла такая необходимость как почистить записи в бд от дубликатов. например от такого:

52742231006,Хилс 2310 IB кон.д/собак  Курица/Овощи 363г.
52742341705,Хиллс 3227 IB кон.дсобак Индейка/Овощи 363г
52742231006,Хилс 2310 IB кон.д/собак  Курица/Овощи 363г.
52742419909,Хиллс 4199 NB сух.д/кошек Тунец/Овощи 2кг
52742419909,Хиллс 4199 NB сух.д/кошек Тунец/Овощи 2кг

Основная полезная информация это

  1. Штрих-код
  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
  1. Добавьте синтетический первичный индекс:
ALTER TABLE barcodes_catalog ADD COLUMN id BIGINT AUTO_INCREMENT PRIMARY KEY;
  1. Удалите дубликаты:
DELETE t1
FROM barcodes_catalog t1
JOIN barcodes_catalog t2 USING (barcode)
WHERE t1.id > t2.id;
  1. Удалите созданный синтетический первичный индекс и создайте естественный по barcode:
ALTER TABLE barcodes_catalog DROP COLUMN id, ADD PRIMARY KEY (barcode);

fiddle

→ Ссылка