Mysql удаление копий

109
13 января 2022, 17:40

Всем привет. Не силён в 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)
)

Тут много вариантов перепробовал. Прошу помощи.

Answer 1

Для записей с одинаковым Name оставляем только запись с максимальным id:

DELETE t1.*
FROM Login t1
JOIN Login t2 USING (Name)
WHERE t1.id < t2.id

Нужен минимальный - поменять знак сравнения.

READ ALSO
Системе тарификации

Системе тарификации

Нужен совет по системе тарификации

58
Delphi - последний запущенный поток

Delphi - последний запущенный поток

Есть запрос MySQL, выполняется долго, поэтому выполняю его в потокеИспользую для этого TThread

72
Подключение блока при прокрутке к месту или через некоторое время после загрузки страницы

Подключение блока при прокрутке к месту или через некоторое время после загрузки страницы

На сайте https://alisa-musicru/ есть блок Клипы с множеством Youtube ifarme что приводит к долгой загрузке сайта, и соответственно снижению рейтинга в поисковиках

141