Как в SQL таблице `upgrades` удалить все элементы, у которых `first_item_id` не уникальный?

Задача придельно простая, но решение не однозначное, спросил у нейросети, несколько раз и у каждого запроса было разное количество затронутых строк


Ответы (1 шт):

Автор решения: CrazyElf

Обычно используется что-то типа такого, если правильно помню:

delete from upgrades as t1 
where exists(
    select * from upgrades as t2 
    where t1.first_item_id=t2.first_item_id
      and t1.id>t2.id)

Это на случай, если нужно удалить не все такие элементы и оставить один из них (самый первый по id).

А если прямо все такие удалить, то что-то типа:

delete from upgrades
where first_item_id in 
   (select first_item_id from upgrades
    group by first_item_id
    having count(*)>1)
→ Ссылка