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 строк. :)
Таблица:
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 подразумевается уникальное поле.
Нужно было удалить дубли - старые строки, сохранив более новые.
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 строка :)