--創建測試表 create table test(id number, name varchar2(20)); insert into test(id, name) values(1,'10'); insert into test(id, name) values(1,'10'); insert into test(id, name) values(2,'20'); insert into test(id, name) values(2,'30'); insert into test(id, name) values(3,'40'); insert into test(id, name) values(3,'40'); commit; select * from test; --查詢相同記錄 select id,name from(select id,name,count(*) from test group by id,name having count(*)>1); select id,name from test a where rowid > (select min(rowid) from test b where a.id = b.id and a.name = b.name); select id,name from test a where rowid <> (select max(rowid) from test b where a.id = b.id and a.name = b.name); --查詢不同記錄 1.select * from test t where t.rowid <= (select min(x.rowid) from test x where t.id = x.id and t.name = x.name); 2.select distinct t.* from test t; --刪除重復記錄 1.delete from test t where t.rowid > (select min(x.rowid) from test x where t.id = x.id and t.name = x.name); 2.delete from test t where t.rowid <> (select min(x.rowid) from test x where t.id = x.id and t.name = x.name); 3.delete from test where rowid in(select rd from(select rowid rd,row_number()over(partition by id,name order by 1 )rn from test ) where rn <>1 );