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

Как найти и удалить дубликаты в таблице MySQL? - оказывается это довольно частый вопрос, возникающий на практике. Удаляет дубликаты тегов в новости для DLE.

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

» » Сообщение:

Как найти и удалить дубликаты в таблице MySQL? - оказывается это довольно частый вопрос, возникающий на практике.
Найти и удалить все дубликаты param в таблице test:

Код: Выделить всё Развернуть
ALTER IGNORE TABLE `test` ADD UNIQUE INDEX(param);

Например:

Код: Выделить всё Развернуть
ALTER IGNORE TABLE `dle_tags` ADD UNIQUE (news_id, tag);

Удаляет дубликаты тегов в новости для DLE.

Второй вариант, как удалить дубликаты строк из таблицы MySQL гораздо проще, но он подходит для сравнительно не большого количества строк.
Мы просто делаем JOIN таблицы на саму себя по условию равенства полей, удаляя записи с большим id.

Код: Выделить всё Развернуть
DELETE t1 FROM `table` t1, `table` t2 WHERE t1.email=t2.email AND t1.id > t2.id

Еще вариант:

Код: Выделить всё Развернуть
DELETE t1 FROM t t1 LEFT JOIN t t2 ON t1.col = t2.col AND t1.id < t2.id WHERE t2.id IS NOT NULL;

и еще:

Код: Выделить всё Развернуть
DELETE tablename
FROM   tablename
       INNER JOIN (SELECT Min(id) minid,
                          name,
                          surname
                   FROM   tablename
                   GROUP  BY name,
                             surname
                   HAVING Count(1) > 1) AS duplicatesTable
               ON ( duplicatesTable.name = tablename.name
                    AND duplicatesTable.surname = tablename.surname
                    AND duplicatesTable.minid <> tablename.id )



Похожие темыКомментарии ПросмотрыПоследнее сообщение
0951MySQL Проблема с кодировкой. Вместо...
Сообщение от: Admin
0329Как составить запрос случайной выбо...
Сообщение от: Admin
0630Кузнецов М.В., Симдянов И.В. MySQL ...
Сообщение от: Admin
0344Какие ошибки не нужно допускать в M...
Сообщение от: Admin
1286Re: Как добавить/удалить индекс к п...
Сообщение от: Admin