delete table where rowid not in (select max(rowid) from table group by col1,col2,...,coln); 对,用rowid 来过滤. delete tb a where a.rowid > (select min(b.rowid) from tb b where b.xx = a.xx) 靠,我面试时就考了这题,当时紧张没写出来,郁闷死了。2楼正解 delete 表名 where rowid not in (select max(rowid) from 表名 group by 列名);(注这里的列名就是你根据那个列判断重复的,可以为多列) delete from table where rowid in (select a.rowid from table a, table b where a.rowid>b.rowid and a.col1=b.col1 and a.col2 = b.col2 and ...) 使用rowid时最后的解决办法,表中每行记录的rowid都是唯一的 delete from table_A a where a.rowid < (select max(b.rowid) from table_A b where a.column1 = b.column1 and a.column2 = b.column2 ... --有多少列就写多少列,方法同上 ); 112223