Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 3

5 ways to delete duplicate records Oracle

Posted on January 29, 2013by sqlandplsql

In Oracle there are many ways to delete duplicate records. Note that below
example are described to just explain the different possibilities.
Consider the EMP table with below rows
create table emp(
EMPNNO integer,
EMPNAME varchar2(20),
SALARY number);
10
11
12
12
12
13
14
15

Bill 2000
Bill 2000
Mark 3000
Mark 3000
Mark 3000
Tom 4000
Tom 5000
Susan 5000

1. Using rowid
SQL > delete from emp
where rowid not in
(select max(rowid) from emp group by empno);
This technique can be applied to almost scenarios. Group by operation should
be on the columns which identify the duplicates.
2. Using self-join
SQL > delete from emp e1
where rowid not in

(select max(rowid) from emp e2


where e1.empno = e2.empno );
3. Using row_number()
SQL > delete from emp where rowid in
(
select rid from
(
select rowid rid,
row_number() over(partition by empno order by empno) rn
from emp
)
where rn > 1
);
This is another efficient way to delete duplicates
4. Using dense_rank()
SQL > delete from emp where rowid in
(
select rid from
(
select rowid rid,
dense_rank() over(partition by empno order by rowid) rn
from emp
)
where rn > 1
);
Here you can use both rank() and dens_rank() since both will give unique
records when order by rowid.

5. Using group by
Consider the EMP table with below rows
10
11
12
13

Bill 2000
Bill 2000
Mark 3000
Mark 3000

SQL > delete from emp where


(empno,empname,salary) in
(
select max(empno),empname,salary from emp
group by empname,salary
);
This technique is only applicable in few scenarios.
Always take extra caution while deleting records.
1. First identify the duplicates using select.
2. Double verify those are actual duplicates or not
3. Take backup if necessary
4. Apply commit only if you are sure.
Did you find above post useful ? Your comments are highly valuable.
About these ads

You might also like