Oracle deletes duplicate data with only one query and the SQL statement to delete duplicate records--1, look for redundant records in the table, duplicate records are based on a single field (ID) to determineSelect * fromTablewhereIdinch(SelectId fromTableGroupByid having Count(Id)> 1) --Example:Select * fromOrders_tmp2whereCust_nbrinch(SelectCust_nbr fromOrders_tmp2Group byCust_nbr having Count(CUST_NBR)> 1) --2, delete redundant records in the table, duplicate records are based on a single field (ID) to judge, leaving only the smallest rowID recordsDELETE fromTableWHERE(ID)inch ( SELECTId fromTableGROUP byId having COUNT(ID)> 1) andROWID not inch(SELECT MIN(ROWID) fromTableGROUP byId having COUNT(*)> 1); --3. Find redundant duplicate records (multiple fields) in the tableSelect * fromTable Awhere(A.ID,A.SEQ)inch(SelectId,seq fromTableGroup byId,seq having Count(*)> 1) --4. Delete extra duplicate records (multiple fields) in the table, leaving only the record with ROWID minimumDelete fromTable Awhere(A.ID,A.SEQ)inch (SelectId,seq fromTableGroup byId,seq having Count(*)> 1) androwID not inch(Select min(ROWID) fromTableGroup byId,seq having Count(*)>1) --5. Find redundant duplicate records (multiple fields) in the table, not including the smallest ROWID records Select * fromTable Awhere(A.ID,A.SEQ)inch (SelectId,seq fromTableGroup byId,seq having Count(*)> 1) androwID not inch(Select min(ROWID) fromTableGroup byId,seq having Count(*)>1) --go to Heavy, cust_nbr,month primary key, CUST_NBR same, leave only month biggest recordDelete fromOrders_tmp2where(CUST_NBR,Month) not inch (SelectCUST_NBR,Max(Month) Keep (Dense_rank firstOrder by Month desc) Max_month fromORDERS_TMP2 TBGroup byCUST_NBR)
Oracle de-weight