Хитрость в том, чтобы сохранить последнее значение при сравнении идентификаторов
DELETE FROM table_name t1, table_name t2 WHERE t1.name = t2.name and t1.link = t2.link and t1.id < t2.id
Это просто идея, это полнофункциональный пример в моей среде оракула (я не использую БД несколько недель, поэтому япытаюсь минимизировать запрос прямо сейчас, извините)
SQL> select * from dup;
ID STH STH2
---------- ---------- ----------
1 45 45
2 45 56
3 45 45
4 14 56
5 14 56
DELETE FROM dup where id in (SELECT DISTINCT t1.id FROM dup t1, dup t2 WHERE t1.sth = t2.sth and t1.sth2 = t2.sth2 and t1.id < t2.id);
SQL> select * from dup;
ID STH STH2
---------- ---------- ----------
2 45 56
3 45 45
5 14 56