Oracle查詢重復數據並刪除,只保留一條記錄


前言
 

項目中,在“資源目錄-在線編目”中,資源項子表存在多條重發數據,需要進行數據清理,刪除重發的數據,最終只保留一條相同的數據。

 

操作的表名:R_RESOURCE_DETAILS

 

操作步驟
 

一、重復記錄根據單個字段來判斷
 

1、首先,查找表中多余的重復記錄,重復記錄是根據單個字段(FIELD_CODE)來判斷

 

select * from R_RESOURCE_DETAILS where FIELD_CODE in(select FIELD_CODE from R_RESOURCE_DETAILS group by FIELD_CODE having count(FIELD_CODE) >1)

 

2、刪除表中多余的重復記錄,重復記錄是根據單個字段(FIELD_CODE)來判斷,只留有rowid最小的記錄

 

delete from R_RESOURCE_DETAILS where (FIELD_CODE) in (select FIELD_CODE from R_RESOURCE_DETAILS group by FIELD_CODE having count(FIELD_CODE) >1) and rowid not in (select min(rowid) from R_RESOURCE_DETAILS group by FIELD_CODE having count(*)>1)

 

 

二、重復記錄根據多個字段來判斷
 

1、查找表中多余的重復記錄(多個字段)

 

select * from R_RESOURCE_DETAILS a where (a.FIELD_CODE,a.DTA_ITEM_NAME) in(select FIELD_CODE,DTA_ITEM_NAME from R_RESOURCE_DETAILS group by FIELD_CODE,DTA_ITEM_NAME having count(*) > 1)

 

 

2、刪除表中多余的重復記錄(多個字段),只留有rowid最小的記錄

 

delete from R_RESOURCE_DETAILS a where (a.FIELD_CODE,a.DTA_ITEM_NAME) in (select FIELD_CODE,DTA_ITEM_NAME from R_RESOURCE_DETAILS group by FIELD_CODE,DTA_ITEM_NAME having count(*) > 1) and rowid not in (select min(rowid) from R_RESOURCE_DETAILS group by FIELD_CODE,DTA_ITEM_NAME having count(*)>1)

 

 

3、查找表中多余的重復記錄(多個字段),不包含rowid最小的記錄

 

select * from R_RESOURCE_DETAILS a where (a.FIELD_CODE,a.DTA_ITEM_NAME) in (select FIELD_CODE,DTA_ITEM_NAME from R_RESOURCE_DETAILS group by FIELD_CODE,DTA_ITEM_NAME having count(*) > 1) and rowid not in (select min(rowid) from R_RESOURCE_DETAILS group by FIELD_CODE,DTA_ITEM_NAME having count(*)>1)


免責聲明!

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



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