Monday, May 11, 2015

Delete duplicate rows from Oracle tables


Delete duplicate rows from Oracle tables

This is very common scenario and advance of Analytical functions made it very simple.


DELETE
FROM <TABLE_NAME>
WHERE ROWID IN
 (    SELECT ROWID FROM
        (    SELECT
            ROWID,
            ROW_NUMBER()
            OVER
            (    PARTITION BY <KEY_COLUMNS>
            ORDER BY <KEY_COLUMNS>
            ) DUP
        FROM <TABLE_NAME>
        )
    WHERE DUP > 1
 );



More about this found at http://www.dba-oracle.com/t_delete_duplicate_table_rows.htm