Saturday, September 7, 2019

How to Delete Duplicate Records in Oracle


SQL> DROP TABLE CONTACTS;

Table dropped.

SQL>
SQL> CREATE TABLE CONTACTS
  2  (
  3     CONTACT_ID   NUMBER,
  4     FIRST_NAME   VARCHAR (10),
  5     LAST_NAME    VARCHAR (20),
  6     EMAIL        VARCHAR (30)
  7  );

Table created.

SQL>
SQL> INSERT INTO CONTACTS VALUES(1,'Syed','Abbas','syed.abbas@example.com');

1 row created.

SQL> INSERT INTO CONTACTS VALUES(2,'Catherine','Abel','catherine.abel@example.com');

1 row created.

SQL> INSERT INTO CONTACTS VALUES(3,'Kim','Abercrombie','kim.abercrombie@example.com');

1 row created.

SQL> INSERT INTO CONTACTS VALUES(4,'Kim','Abercrombie','kim.abercrombie@example.com');

1 row created.

SQL> INSERT INTO CONTACTS VALUES(5,'Kim','Abercrombie','kim.abercrombie@example.com');

1 row created.

SQL> INSERT INTO CONTACTS VALUES(6,'Hazem','Abolrous','hazem.abolrous@example.com');

1 row created.

SQL> INSERT INTO CONTACTS VALUES(7,'Hazem','Abolrous','hazem.abolrous@example.com');

1 row created.

SQL> INSERT INTO CONTACTS VALUES(8,'Humberto','Acevedo','humberto.acevedo@example.com');

1 row created.

SQL> INSERT INTO CONTACTS VALUES(9,'Humberto','Acevedo','humberto.acevedo@example.com');

1 row created.

SQL> INSERT INTO CONTACTS VALUES(10,'Pilar','Ackerman','pilar.ackerman@example.com');

1 row created.

SQL> COMMIT;

Commit complete.

SQL>
SQL> SELECT * FROM CONTACTS;

CONTACT_ID FIRST_NAME LAST_NAME            EMAIL
---------- ---------- -------------------- ------------------------------
         1 Syed       Abbas                syed.abbas@example.com
         2 Catherine  Abel                 catherine.abel@example.com
         3 Kim        Abercrombie          kim.abercrombie@example.com
         4 Kim        Abercrombie          kim.abercrombie@example.com
         5 Kim        Abercrombie          kim.abercrombie@example.com
         6 Hazem      Abolrous             hazem.abolrous@example.com
         7 Hazem      Abolrous             hazem.abolrous@example.com
         8 Humberto   Acevedo              humberto.acevedo@example.com
         9 Humberto   Acevedo              humberto.acevedo@example.com
        10 Pilar      Ackerman             pilar.ackerman@example.com

10 rows selected.

SQL>

*******************************************************************************

SQL> DELETE FROM CONTACTS WHERE CONTACT_ID NOT IN (SELECT MIN(CONTACT_ID) FROM CONTACTS GROUP BY FIRST_NAME,LAST_NAME,EMAIL);

4 rows deleted.

SQL> SELECT * FROM CONTACTS;

CONTACT_ID FIRST_NAME LAST_NAME            EMAIL
---------- ---------- -------------------- ------------------------------
         1 Syed       Abbas                syed.abbas@example.com
         2 Catherine  Abel                 catherine.abel@example.com
         3 Kim        Abercrombie          kim.abercrombie@example.com
         6 Hazem      Abolrous             hazem.abolrous@example.com
         8 Humberto   Acevedo              humberto.acevedo@example.com
        10 Pilar      Ackerman             pilar.ackerman@example.com

6 rows selected.

*******************************************************************************

SQL> DELETE FROM CONTACTS WHERE ROWID NOT IN (SELECT MIN(ROWID) FROM CONTACTS GROUP BY FIRST_NAME,LAST_NAME,EMAIL);

4 rows deleted.

SQL> SELECT * FROM CONTACTS;

CONTACT_ID FIRST_NAME LAST_NAME            EMAIL
---------- ---------- -------------------- ------------------------------
         1 Syed       Abbas                syed.abbas@example.com
         2 Catherine  Abel                 catherine.abel@example.com
         3 Kim        Abercrombie          kim.abercrombie@example.com
         6 Hazem      Abolrous             hazem.abolrous@example.com
         8 Humberto   Acevedo              humberto.acevedo@example.com
        10 Pilar      Ackerman             pilar.ackerman@example.com

6 rows selected.

SQL>
*****************************************************************************

SQL> DELETE FROM CONTACTS A WHERE ROWID > (SELECT MIN(ROWID) FROM CONTACTS B WHERE A.FIRST_NAME=B.FIRST_NAME AND A.LAST_NAME=B.LAST_NAME AND A.EMAIL=B.EMAIL);

4 rows deleted.

SQL> SELECT * FROM CONTACTS;

CONTACT_ID FIRST_NAME LAST_NAME            EMAIL
---------- ---------- -------------------- ------------------------------
         1 Syed       Abbas                syed.abbas@example.com
         2 Catherine  Abel                 catherine.abel@example.com
         3 Kim        Abercrombie          kim.abercrombie@example.com
         6 Hazem      Abolrous             hazem.abolrous@example.com
         8 Humberto   Acevedo              humberto.acevedo@example.com
        10 Pilar      Ackerman             pilar.ackerman@example.com

6 rows selected.

*********************************************************************************

SQL> DELETE FROM CONTACTS
  2        WHERE ROWID NOT IN (SELECT "ROWID"
  3                              FROM (SELECT CONTACT_ID,
  4                                           FIRST_NAME,
  5                                           LAST_NAME,
  6                                           EMAIL,
  7                                           ROW_NUMBER ()
  8                                           OVER (
  9                                              PARTITION BY FIRST_NAME,
 10                                                           LAST_NAME,
 11                                                           EMAIL
 12                                              ORDER BY
 13                                                 FIRST_NAME, LAST_NAME, EMAIL)
 14                                              ROW_NUM,
 15                                           ROWID AS "ROWID"
 16                                      FROM CONTACTS)
 17                             WHERE ROW_NUM = 1);

4 rows deleted.

SQL>
SQL> SELECT * FROM CONTACTS;

CONTACT_ID FIRST_NAME LAST_NAME            EMAIL
---------- ---------- -------------------- ------------------------------
         1 Syed       Abbas                syed.abbas@example.com
         2 Catherine  Abel                 catherine.abel@example.com
         3 Kim        Abercrombie          kim.abercrombie@example.com
         6 Hazem      Abolrous             hazem.abolrous@example.com
         8 Humberto   Acevedo              humberto.acevedo@example.com
        10 Pilar      Ackerman             pilar.ackerman@example.com

6 rows selected.

No comments:

Post a Comment

Delete Row Button to all records of Interactive Report in Oracle Apex

 1. add 'Delete' Del column to Report Query 2. Set the Following Properties for the DEL Column Type: Link Heading: Delete Targ...