Bạn có thể thử chạy điều này nhiều lần :
delete from mytable where id in (
select max(id)
from mytable
group by name
having count(1) > 1
);
Ở đâu nhiều lần bằng số lần lặp lại tối đa mà bạn có trong name
cột.
Nếu không, bạn có thể thử truy vấn phức tạp hơn sau:
delete from mytable where id in (
select id from mytable
except
(
select min(id)
from mytable
group by name
having count(1) > 1
union all
select min(id)
from mytable
group by name
having count(1) = 1
)
);
Chạy truy vấn này một lần duy nhất sẽ xóa tất cả những gì bạn cần. Tuy nhiên vẫn chưa thử ...