Oracle中查詢和刪除相同記錄的3種方法


--創建測試表
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
                     );

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM