Ответ 1
NB - вам нужно сделать это сначала на тестовой копии таблицы!
Когда я это сделал, я обнаружил, что, если я не включил AND n1.id <> n2.id
, он удалил каждую строку в таблице.
1) Если вы хотите сохранить строку с наименьшим значением id
:
DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name
2) Если вы хотите сохранить строку с наивысшим значением id
:
DELETE n1 FROM names n1, names n2 WHERE n1.id < n2.id AND n1.name = n2.name
Я использовал этот метод в MySQL 5.1
Не уверен в других версиях.
Обновление: поскольку пользователи Google для удаления дубликатов заканчиваются здесь
Хотя вопрос OP о DELETE, пожалуйста, имейте в виду, что использование INSERT и DISTINCT происходит намного быстрее. Для базы данных с 8 миллионами строк запрос ниже занимает 13 минут, а при использовании DELETE прошло более 2 часов, но не завершилось.
INSERT INTO tempTableName(cellId,attributeId,entityRowId,value)
SELECT DISTINCT cellId,attributeId,entityRowId,value
FROM tableName;