Во-первых, делайте группу за столбцом, для которого вы хотите удалить дубликаты. Но я не делаю это с группой по. Я пишу самостоятельное соединение.
Вам не нужно создавать временную таблицу.
Удалить дубликаты, кроме одной записи:
В этой таблице должен быть столбец автоинкремента.
Возможное решение, с которым я только что столкнулся:
DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name
, если вы хотите сохранить строку с наименьшим значением идентификатора автоинкремента ИЛИ
DELETE n1 FROM names n1, names n2 WHERE n1.id < n2.id AND n1.name = n2.name
, если вы хотите сохранить в строке самое высокое значение идентификатора автоматического приращения.
Вы можете перепроверить ваше решение, снова найти дубликат:
SELECT * FROM `names` GROUP BY name, id having count(name) > 1;
Если возвращается 0 результатов, значит, ваш запрос выполнен успешно.