Create a table:
create table Test_del(EMP_NO integer, EMP_NAME varchar2(20),SALARY number);
Insert into TEST_DEL
(EMP_NO, EMP_NAME, SALARY)
Values
(210, 'SACHIN', 2100);
Insert into TEST_DEL
(EMP_NO, EMP_NAME, SALARY)
Values
(240, 'RAJ', 2500);
Insert into TEST_DEL
(EMP_NO, EMP_NAME, SALARY)
Values
(210, 'SEEMA', 2500);
Insert into TEST_DEL
(EMP_NO, EMP_NAME, SALARY)
Values
(216, 'RANU', 3000);
Insert into TEST_DEL
(EMP_NO, EMP_NAME, SALARY)
Values
(216, 'PAPPU', 5000);
Precaution:
1. Take a back up of your data;
2. Double verify the duplicates.
Method:
1. Group by method:
SQL> select * from Test_del;
EMP_NO EMP_NAME SALARY
---------- -------------------- ----------
216 PAPPU 5000
216 RANU 3000
210 SEEMA 2500
240 RAJ 2500
210 SACHIN 2100
SQL>
SQL> delete from Test_del where (EMP_NO,EMP_NAME,salary) in (select max(emp_no),
emp_name,salary from Test_del group by emp_name,salary);
5 rows deleted.
SQL> select * from Test_del;
no rows selected
Note: above statement will deleted the all recorded;
=====================
2ND method:
create table EMP11 (name varchar2(20), dept_no number(10), salary number (20));
insert into emp11 VALUES ('SACHIN',200,1200);
insert into emp11 VALUES ('PAPPU',200,1400);
insert into emp11 VALUES ('RAJESH',200,1800);
insert into emp11 VALUES ('NAMO',205,2200);
insert into emp11 VALUES ('BEENU',201,1000);
DELETE FROM EMP11 WHERE ROWID NOT IN (SELECT MIN(ROWID) FROM EMP11 GROUP BY SALARY);
0 Comments