2015-08-23 3 views
0

Я пытаюсь удалить повторяющиеся записи mySQL, где name - это то же самое. Я нашел это решение у кого-то другого здесь (да, я искал раньше!), Но он не работает. Что я здесь делаю неправильно?удаление дубликатов mySQL из таблицы. Что я делаю не так?

DELETE FROM db_products USING db_products, db_products e1 
WHERE db_products.id > e1.id 
AND db_products.name = e1.name 

Я также попытался product_id вместо id, потому что мои уникальные идентификаторы называются, но это также бросает ошибку MYSQL.

+0

Укажите некоторые данные образца и DDL. –

ответ

0

Самый простой способ создать временную таблицу и добавить различные значения из исходной таблицы

SELECT DISTINCT * INTO db_products_temp ИЗ db_products;

После проверки отбросьте исходную таблицу и переименуйте таблицу temp в db_products.

+0

Вы можете отказаться от оригинала во всех случаях? – Drew

+0

зависит от вашей потребности. Если вы чувствуете, что оригинал недействителен, вы также можете его удалить. Если это необходимо, верните его или переименуйте. – Richie

+0

классная вещь делает это с таблицей Alter, блокировкой, быстрой, DDL-изменением, которая является горячей заменой! Это было указано мне для меня без ведома. На самом деле большинство вещей без ведома меня:> Percona [статья] (https://www.percona.com/blog/2014/11/18/avoiding-mysql-alter-table-downtime/) – Drew

0

Может быть много записей, которые удовлетворят условию «db_products.id> e1.id». Вот почему все дубликаты не будут удалены. Попробуйте выполнить запрос ниже. Это может помочь.

DELETE FROM db_products USING db_products, db_products e1 
    WHERE max(db_products.id) > e1.id 
    AND db_products.name = e1.name 
    group by db_products.id; 
Смежные вопросы