Всем привет. Не силён в sql, но есть необходимость удалить все копии записей, кроме первой, где Name одинаковый.
Пробую сделать через:
DELETE FROM Login
WHERE Name NOT IN (SELECT max(Name) FROM Login GROUP BY Name HAVING
count(Name)>1)
Но получаю ошибку
You can't specify target table 'Login' for update in FROM clause
Пробовал сделать по аналогии с Как удалить записи SQL запросом с подзапросом?
Но ничего не вышло.
Приблизительно так:
DELETE FROM Login
WHERE Name NOT IN (
(SELECT tempT.Login
FROM (SELECT Name WHERE Name NOT IN (SELECT max(Name) FROM Login GROUP BY Name HAVING count(Name) > 1))
AS tempT)
)
Тут много вариантов перепробовал. Прошу помощи.
Для записей с одинаковым Name оставляем только запись с максимальным id:
DELETE t1.*
FROM Login t1
JOIN Login t2 USING (Name)
WHERE t1.id < t2.id
Нужен минимальный - поменять знак сравнения.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей