How to Delete Duplicate Records Using Oracle's Rank Function
I’ve found a neat way to delete duplicates from my database tables using Oracle’s RANK() function.
DELETE FROM __table__
WHERE ROWID IN (
SELECT MyKey
FROM (
-- use the RANK() function to assign a sequential number to each set of
records.
SELECT MyKey, display_name, RANK() OVER (PARTITION BY display_name ORDER BY MyKey) AS SeqNumber
FROM (
-- use the ROWID psuedo-column to get a unique id for each record.
SELECT ROWID AS MyKey, display_name
FROM __table__
WHERE (display_name) IN (
-- select the set of records that are duplicates.
SELECT display_name FROM __table__ GROUP BY display_name HAVING COUNT(*) > 1
)
)
)
WHERE SeqNumber > 1
)