|
||||||||||||||||||||||||||||||||||||||
|
Find and remove
duplicate rows from a table One of the most
important features of Oracle is the ability to detect and remove duplicate
rows from a table. While many Oracle DBA place primary key referential
integrity constraints on a table, many shops do not use RI because they need
the flexibility. The most
effective way to detect duplicate rows is to join the table against itself
as shown below. SELECT BOOK_UNIQUE_ID, PAGE_SEQ_NBR, IMAGE_KEY FROM page_image
A WHERE rowid
> (SELECT
min(rowid) FROM page_image B WHERE
B.key1 = A.key1 and
B.key2 = A.key2 and
B.key3 = A.key3
); Please
note that you must specify all of the columns that make the row a duplicate
in the SQL where clause. Once you have detected the duplicate rows, you may
modify the SQL statement to remove the duplicates as shown below: DELETE
FROM
table_name A
A.rowid >
ANY (SELECT B.rowid
table_name B
A.col1 = B.col1
A.col2 = B.col2 You can also detect and delete duplicate rows using Oracle analytic functions:
delete from As we see, there are several ways to detect and delete duplicate rows from Oracle tables.
If
you like Oracle tuning, you might enjoy my latest book “Oracle Tuning: The Definitive Reference” by Rampant TechPress. It’s only
$41.95(I don’t think it is right to charge a fortune for books!) and you
can buy it right now at this link: Reader Comments: Rob Arden states: The tip on this page helped with removing duplicate rows. I thought this might be useful so I'm passing it on: I needed to add a
null check because this fails to remove dupe rows where the fields match on
a null value. So instead of the given:
Thanks for the tips and keep up the good work.
|
|
||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||