This script displays all rows with duplicate information in them. This script uses the EMP table in the SCOTT schema as an example. I had the disable the primary key to allow me to input duplicates into the table. Also, note that I find these duplicate rows using the empno field. For your purposes, you will have to replace the empno reference with your potential primary key field(s).
To know how to delete these duplicate rows, check out the Script to delete duplicates from your table
Back to SQL scripts
| SQL> | SELECT | * |
| | FROM | emp e |
| | WHERE | 1 < (SELECT count(empno) |
| | | FROM emp e2 |
| | | WHERE e.empno = e2.empno) |
| | ORDER | BY empno |
To run the code, either cut and paste it onto your favourite editor and save the file to say findDuplicates.sql. .
At the SQL*PLUS prompt, execute the script using the syntax
SQL>@findDuplicates
On execution, the script displays information about duplicate rows in the table.
Consider the following example using the EMP table:
SQL> select * from emp;
| EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO |
| --------- | ---------- | --------- | --------- | --------- | --------- | --------- | --------- |
| 7369 | SMITH | CLERK | 7902 | 17-DEC-80 | 800 | | 20 |
| 7499 | ALLEN | SALESMAN | 7698 | 20-FEB-81 | 1600 | 300 | 30 |
| 7521 | WARD | SALESMAN | 7698 | 22-FEB-81 | 1250 | 500 | 30 |
|
7566 | JONES | MANAGER | 7839 | 02-APR-81 | 2975 | 20 |
| 7654 | MARTIN | SALESMAN | 7698 | 28-SEP-81 | 1250 | 1400 | 30 |
| 7698 | BLAKE | MANAGER | 7839 | 01-MAY-81 | 2850 | | 30 |
| 7782 | CLARK | MANAGER | 7839 | 09-JUN-81 | 2450 | | 20 |
| 7788 | SCOTT | ANALYST | 7566 | 19-APR-87 | 3000 | | 10 |
| 7839 | KING | PRESIDENT | | 17-NOV-81 | 5000 | | 10 |
| 7844 | TURNER | SALESMAN | 7698 | 08-SEP-81 | 1500 | 0 | 30 |
| 7876 | ADAMS | CLERK | 7788 | 23-MAY-87 | 1100 | | 20 |
| 7900 | JAMES | CLERK | 7698 | 03-DEC-81 | 950 | | 30 |
| 7902 | FORD | ANALYST | 7566 | 03-DEC-81 | 3000 | | 20 |
| 7934 | MILLER | CLERK | 7782 | 23-JAN-82 | 1300 | | 10 |
14 rows selected.
| SQL> | ALTER TABLE emp |
| 2 | DISABLE PRIMARY KEY; |
Table altered.
| SQL> | INSERT INTO emp |
| 2 | SELECT * |
| 3 | FROM emp |
| 4 | WHERE comm IS NULL; |
10 rows created.
| SQL> | SELECT *
|
| 2 | FROM emp;
|
| EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO |
--------- | ---------- | --------- | --------- | --------- | --------- | --------- | --------- |
| 7369 | SMITH | CLERK | 7902 | 17-DEC-80 | 800 | | 20 |
| 7499 | ALLEN | SALESMAN | 7698 | 20-FEB-81 | 1600 | 300 | 30 |
| 7521 | WARD | SALESMAN | 7698 | 22-FEB-81 | 1250 | 500 | 30 |
|
7566 | JONES | MANAGER | 7839 | 02-APR-81 | 2975 | | 20 |
|
7654 | MARTIN | SALESMAN | 7698 | 28-SEP-81 | 1250 | 1400 | 30 |
|
7698 | BLAKE | MANAGER | 7839 | 01-MAY-81 | 2850 | | 30 |
|
7782 | CLARK | MANAGER | 7839 | 09-JUN-81 | 2450 | | 20 |
|
7788 | SCOTT | ANALYST | 7566 | 19-APR-87 | 3000 | | 10 |
|
7839 | KING | PRESIDENT | | 17-NOV-81 | 5000 | | 10 |
|
7844 | TURNER | SALESMAN | 7698 | 08-SEP-81 | 1500 | 0 | 30 |
|
7876 | ADAMS | CLERK | 7788 | 23-MAY-87 | 1100 | | 20 |
|
7900 | JAMES | CLERK | 7698 | 03-DEC-81 | 950 | | 30 |
|
7902 | FORD | ANALYST | 7566 | 03-DEC-81 | 3000 | | 20 |
|
7934 | MILLER | CLERK | 7782 | 23-JAN-82 | 1300 | | 10 |
|
7369 | SMITH | CLERK | 7902 | 17-DEC-80 | 800 | | 20 |
|
7566 | JONES | MANAGER | 7839 | 02-APR-81 | 2975 | | 20 |
|
7698 | BLAKE | MANAGER | 7839 | 01-MAY-81 | 2850 | | 30 |
|
7782 | CLARK | MANAGER | 7839 | 09-JUN-81 | 2450 | | 20 |
|
7788 | SCOTT | ANALYST | 7566 | 19-APR-87 | 3000 | | 10 |
|
7839 | KING | PRESIDENT | | 17-NOV-81 | 5000 | | 10 |
|
7876 | ADAMS | CLERK | 7788 | 23-MAY-87 | 1100 | | 20 |
|
7900 | JAMES | CLERK | 7698 | 03-DEC-81 | 950 | | 30 |
|
7902 | FORD | ANALYST | 7566 | 03-DEC-81 | 3000 | | 20 |
|
7934 | MILLER | CLERK | 7782 | 23-JAN-82 | 1300 | | 10 |
24 rows selected.
| EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO |
| --------- | ---------- | --------- | --------- | --------- | --------- | --------- | --------- |
|
7369 | SMITH | CLERK | 7902 | 17-DEC-80 | 800 | | 20 |
|
7369 | SMITH | CLERK | 7902 | 17-DEC-80 | 800 | | 20 |
|
7566 | JONES | MANAGER | 7839 | 02-APR-81 | 2975 | | 20 |
|
7566 | JONES | MANAGER | 7839 | 02-APR-81 | 2975 | | 20 |
|
7698 | BLAKE | MANAGER | 7839 | 01-MAY-81 | 2850 | | 30 |
|
7698 | BLAKE | MANAGER | 7839 | 01-MAY-81 | 2850 | | 30 |
|
7782 | CLARK | MANAGER | 7839 | 09-JUN-81 | 2450 | | 20 |
|
7782 | CLARK | MANAGER | 7839 | 09-JUN-81 | 2450 | | 20 |
|
7788 | SCOTT | ANALYST | 7566 | 19-APR-87 | 3000 | | 10 |
|
7788 | SCOTT | ANALYST | 7566 | 19-APR-87 | 3000 | | 10 |
|
7839 | KING | PRESIDENT | | 17-NOV-81 | 5000 | | 10 |
|
7839 | KING | PRESIDENT | | 17-NOV-81 | 5000 | | 10 |
|
7876 | ADAMS | CLERK | 7788 | 23-MAY-87 | 1100 | | 20 |
|
7876 | ADAMS | CLERK | 7788 | 23-MAY-87 | 1100 | | 20 |
|
7900 | JAMES | CLERK | 7698 | 03-DEC-81 | 950 | | 30 |
|
7900 | JAMES | CLERK | 7698 | 03-DEC-81 | 950 | | 30 |
|
7902 | FORD | ANALYST | 7566 | 03-DEC-81 | 3000 | | 20 |
|
7902 | FORD | ANALYST | 7566 | 03-DEC-81 | 3000 | | 20 |
|
7934 | MILLER | CLERK | 7782 | 23-JAN-82 | 1300 | | 10 |
|
7934 | MILLER | CLERK | 7782 | 23-JAN-82 | 1300 | | 10 |
20 rows selected.
SQL>
Back to SQL scripts