MySQL « Удаления дубликатов строк в Mysql

Подскажите дорогие гуру, а как удалить дубликаты строк с определёнными условиями.
Таблица:
ID NAME
1 Alex
1 John
1 Alex
2 Jay
2 Alex
2 Alex

Надо удалить дубликаты строк с условием что удаляются только те строки где свой ID.
Должно стать:
ID NAME
1 Alex
1 John
2 Jay
2 Alex

Таблица имеет значений на 65000 строк. :)

1 ответов


Самый простой способ скопировать в другую таблицу


CREATE TABLE table_name SELECT ID, NAME FROM tbl GROUP BY ID, NAME;
 


ALTER IGNORE TABLE table_name ADD UNIQUE INDEX(id,name);
Получим таблицу, в которой заведомо отсутствуют дублирующиеся поля и не получится добавить новые дубликаты.

Как недавно ответил Сергей, задача решается путём создания временной таблицы, копирования в неё уникальных данных, стирания старых и возвращения данных обратно в таблицу.
На время работы внешние ключи должны быть удалены. После работы - восстановлены.

P.S. Странно, что у вас ID повторяется. Обычно под ID подразумевается уникальное поле.


Использовать unique или написать элементарный скрипт для очистки.


Нужно было удалить дубли - старые строки, сохранив более новые.


DELETE FROM my_table WHERE ID IN (
  SELECT
    ID
  FROM ( SELECT ID, COUNT(ID) AS `Cnt` FROM my_table GROUP BY `Date`, ObjectID ) AS t
  WHERE
    Cnt>1
)
 
Повторять пока удаляется хоть 1 строка :)