使用伪列,rowid,保留rowid最小的那个记录 create table a (id varchar2(10),name varchar2(20)); delete from a where id in (select id from a group by id having count(id)>1) and rowid not in (select min(rowid) from a group by id havingcount(id)> 1);