删除重复行SQL举例

删除重复行SQL实验简单举例

说明:实验按顺序进行,前后存在关联性,阅读时请注意,打开目录更便于查看。

构造实验环境:

SQL> select count(*) from emp;

COUNT(*)

----------

14

SQL> alter table EMP drop constraint PK_EMP CASCADE;

--删除主键约束

SQL> insert into EMP select * from EMP;

--向EMP表中插入重复行

SQL> commit;

SQL> select count(*) from emp;

COUNT(*)

----------

28

下面举例单字段删除重复行

例1:查询出重复记录(单字段)

SQL> select * from emp

where empno in (select empno from emp group by empno having count

(empno) > 1);

--查找出emp表中多余的重复记录,重复记录是根据empno来判读

EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO

---------- ---------- --------- ---------- --------- ---------- ---------- ----------

7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30

7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30

7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10

7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10

7839 KING       PRESIDENT            17-NOV-81       5000                    10

7839 KING       PRESIDENT            17-NOV-81       5000                    10

7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30

7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30

7902 FORD       ANALYST         7566 03-DEC-81       3000                    20

7902 FORD       ANALYST         7566 03-DEC-81       3000                    20

7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30

7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30

7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30

7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30

7788 SCOTT      ANALYST         7566 19-APR-87       3000                    20

7788 SCOTT      ANALYST         7566 19-APR-87       3000                    20

7566 JONES      MANAGER         7839 02-APR-81       2975                    20

7566 JONES      MANAGER         7839 02-APR-81       2975                    20

7934 MILLER     CLERK           7782 23-JAN-82       1300                    10

7934 MILLER     CLERK           7782 23-JAN-82       1300                    10

7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30

7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30

7876 ADAMS      CLERK           7788 23-MAY-87       1100                    20

7876 ADAMS      CLERK           7788 23-MAY-87       1100                    20

7369 SMITH      CLERK           7902 17-DEC-80        800                    20

7369 SMITH      CLERK           7902 17-DEC-80        800                    20

7900 JAMES      CLERK           7698 03-DEC-81        950                    30

7900 JAMES      CLERK           7698 03-DEC-81        950                    30

28 rows selected.

例2:删除表中多余的重复记录,只留有rowid最小的记录

SQL> delete from emp

where empno in (select empno from emp group by empno having count

(empno) > 1)

and rowid not in (select min(rowid) from emp group by empno having count(empno

)>1);

--删除表中多余的重复记录,重复记录是根据单个字段empno来判读

--保留rowid最小的行记录信息

14 rows deleted.

SQL> select * from emp ;  --重复的行已经删除

EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO

---------- ---------- --------- ---------- --------- ---------- ---------- ----------

7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30

7902 FORD       ANALYST         7566 03-DEC-81       3000                    20

7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30

7788 SCOTT      ANALYST         7566 19-APR-87       3000                    20

7369 SMITH      CLERK           7902 17-DEC-80        800                    20

7566 JONES      MANAGER         7839 02-APR-81       2975                    20

7876 ADAMS      CLERK           7788 23-MAY-87       1100                    20

7900 JAMES      CLERK           7698 03-DEC-81        950                    30

7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30

7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30

7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10

7934 MILLER     CLERK           7782 23-JAN-82       1300                    10

7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30

7839 KING       PRESIDENT            17-NOV-81       5000                    10

14 rows selected.

SQL> insert into emp select * from emp;

SQL> insert into emp values(8888,‘HYL‘,‘DBA‘,7839,sysdate,2000,‘‘,60);

1 row created.

SQL> commit;

Commit complete.

SQL> select * from emp;

EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO

---------- ---------- --------- ---------- --------- ---------- ---------- ----------

7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30

7902 FORD       ANALYST         7566 03-DEC-81       3000                    20

7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30

7788 SCOTT      ANALYST         7566 19-APR-87       3000                    20

7369 SMITH      CLERK           7902 17-DEC-80        800                    20

7566 JONES      MANAGER         7839 02-APR-81       2975                    20

7876 ADAMS      CLERK           7788 23-MAY-87       1100                    20

7900 JAMES      CLERK           7698 03-DEC-81        950                    30

7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30

7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30

7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10

7934 MILLER     CLERK           7782 23-JAN-82       1300                    10

7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30

7839 KING       PRESIDENT            17-NOV-81       5000                    10

7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30

7902 FORD       ANALYST         7566 03-DEC-81       3000                    20

7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30

7788 SCOTT      ANALYST         7566 19-APR-87       3000                    20

7369 SMITH      CLERK           7902 17-DEC-80        800                    20

7566 JONES      MANAGER         7839 02-APR-81       2975                    20

7876 ADAMS      CLERK           7788 23-MAY-87       1100                    20

7900 JAMES      CLERK           7698 03-DEC-81        950                    30

7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30

7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30

7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10

7934 MILLER     CLERK           7782 23-JAN-82       1300                    10

7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30

7839 KING       PRESIDENT            17-NOV-81       5000                    10

8888 HYL        DBA             7839 06-JUL-14       2000                    60

29 rows selected.

多字段下:

例3:查询表中重复的记录(多字段)

SQL> select * from emp a

where (a.empno,a.deptno) in (select empno,deptno from emp group by empno,deptno having

count(*) > 1);

EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO

---------- ---------- --------- ---------- --------- ---------- ---------- ----------

7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30

7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30

7902 FORD       ANALYST         7566 03-DEC-81       3000                    20

7902 FORD       ANALYST         7566 03-DEC-81       3000                    20

7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10

7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10

7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30

7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30

7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30

7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30

7900 JAMES      CLERK           7698 03-DEC-81        950                    30

7900 JAMES      CLERK           7698 03-DEC-81        950                    30

7839 KING       PRESIDENT            17-NOV-81       5000                    10

7839 KING       PRESIDENT            17-NOV-81       5000                    10

7566 JONES      MANAGER         7839 02-APR-81       2975                    20

7566 JONES      MANAGER         7839 02-APR-81       2975                    20

7788 SCOTT      ANALYST         7566 19-APR-87       3000                    20

7788 SCOTT      ANALYST         7566 19-APR-87       3000                    20

7369 SMITH      CLERK           7902 17-DEC-80        800                    20

7369 SMITH      CLERK           7902 17-DEC-80        800                    20

7876 ADAMS      CLERK           7788 23-MAY-87       1100                    20

7876 ADAMS      CLERK           7788 23-MAY-87       1100                    20

7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30

7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30

7934 MILLER     CLERK           7782 23-JAN-82       1300                    10

7934 MILLER     CLERK           7782 23-JAN-82       1300                    10

7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30

7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30

28 rows selected.

例4:删除表中重复记录(多个字段),只保留rowid最小的记录

SQL> delete from emp a

where (a.empno,a.deptno) in (select empno,deptno from emp group by empno,deptno having

count(*) > 1)

and rowid not in (select min(rowid) from emp group by empno,deptno having count(*)>1);

14 rows deleted.

SQL> select * from emp;

EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO

---------- ---------- --------- ---------- --------- ---------- ---------- ----------

7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30

7902 FORD       ANALYST         7566 03-DEC-81       3000                    20

7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30

7788 SCOTT      ANALYST         7566 19-APR-87       3000                    20

7369 SMITH      CLERK           7902 17-DEC-80        800                    20

7566 JONES      MANAGER         7839 02-APR-81       2975                    20

7876 ADAMS      CLERK           7788 23-MAY-87       1100                    20

7900 JAMES      CLERK           7698 03-DEC-81        950                    30

7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30

7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30

7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10

7934 MILLER     CLERK           7782 23-JAN-82       1300                    10

7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30

7839 KING       PRESIDENT            17-NOV-81       5000                    10

8888 HYL        DBA             7839 06-JUL-14       2000                    60

15 rows selected.

SQL> rollback

2  ;

Rollback complete.

SQL> select * from emp;

EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO

---------- ---------- --------- ---------- --------- ---------- ---------- ----------

7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30

7902 FORD       ANALYST         7566 03-DEC-81       3000                    20

7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30

7788 SCOTT      ANALYST         7566 19-APR-87       3000                    20

7369 SMITH      CLERK           7902 17-DEC-80        800                    20

7566 JONES      MANAGER         7839 02-APR-81       2975                    20

7876 ADAMS      CLERK           7788 23-MAY-87       1100                    20

7900 JAMES      CLERK           7698 03-DEC-81        950                    30

7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30

7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30

7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10

7934 MILLER     CLERK           7782 23-JAN-82       1300                    10

7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30

7839 KING       PRESIDENT            17-NOV-81       5000                    10

7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30

7902 FORD       ANALYST         7566 03-DEC-81       3000                    20

7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30

7788 SCOTT      ANALYST         7566 19-APR-87       3000                    20

7369 SMITH      CLERK           7902 17-DEC-80        800                    20

7566 JONES      MANAGER         7839 02-APR-81       2975                    20

7876 ADAMS      CLERK           7788 23-MAY-87       1100                    20

7900 JAMES      CLERK           7698 03-DEC-81        950                    30

7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30

7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30

7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10

7934 MILLER     CLERK           7782 23-JAN-82       1300                    10

7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30

7839 KING       PRESIDENT            17-NOV-81       5000                    10

8888 HYL        DBA             7839 06-JUL-14       2000                    60

29 rows selected.

例5:查询表中多余的重复记录(多字段),不包含rowid最小的记录

SQL> select * from emp a

where (a.empno,a.deptno) in (select empno,deptno from emp group by empno,deptno having

count(*) > 1)

and rowid not in (select min(rowid) from emp group by empno,deptno having count(*)>1);

EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO

---------- ---------- --------- ---------- --------- ---------- ---------- ----------

7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30

7902 FORD       ANALYST         7566 03-DEC-81       3000                    20

7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10

7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30

7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30

7900 JAMES      CLERK           7698 03-DEC-81        950                    30

7839 KING       PRESIDENT            17-NOV-81       5000                    10

7566 JONES      MANAGER         7839 02-APR-81       2975                    20

7788 SCOTT      ANALYST         7566 19-APR-87       3000                    20

7369 SMITH      CLERK           7902 17-DEC-80        800                    20

7876 ADAMS      CLERK           7788 23-MAY-87       1100                    20

7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30

7934 MILLER     CLERK           7782 23-JAN-82       1300                    10

7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30

14 rows selected.

SQL> commit;

Commit complete.

SQL> select * from emp;   --emp表实际数据

EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO

---------- ---------- --------- ---------- --------- ---------- ---------- ----------

7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30

7902 FORD       ANALYST         7566 03-DEC-81       3000                    20

7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30

7788 SCOTT      ANALYST         7566 19-APR-87       3000                    20

7369 SMITH      CLERK           7902 17-DEC-80        800                    20

7566 JONES      MANAGER         7839 02-APR-81       2975                    20

7876 ADAMS      CLERK           7788 23-MAY-87       1100                    20

7900 JAMES      CLERK           7698 03-DEC-81        950                    30

7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30

7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30

7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10

7934 MILLER     CLERK           7782 23-JAN-82       1300                    10

7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30

7839 KING       PRESIDENT            17-NOV-81       5000                    10

7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30

7902 FORD       ANALYST         7566 03-DEC-81       3000                    20

7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30

7788 SCOTT      ANALYST         7566 19-APR-87       3000                    20

7369 SMITH      CLERK           7902 17-DEC-80        800                    20

7566 JONES      MANAGER         7839 02-APR-81       2975                    20

7876 ADAMS      CLERK           7788 23-MAY-87       1100                    20

7900 JAMES      CLERK           7698 03-DEC-81        950                    30

7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30

7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30

7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10

7934 MILLER     CLERK           7782 23-JAN-82       1300                    10

7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30

7839 KING       PRESIDENT            17-NOV-81       5000                    10

8888 HYL        DBA             7839 06-JUL-14       2000                    60

29 rows selected.

***********************************************声明************************************************

原创作品,出自 “深蓝的blog” 博客,欢迎转载,转载时请务必注明出处(http://blog.csdn.net/huangyanlong)。

表述有错误之处,请您留言,不胜感激。

提醒:点击目录,更有助于您的查看。

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

删除重复行SQL举例

时间: 2024-10-05 19:05:44

删除重复行SQL举例的相关文章

删除反复行SQL举例

删除反复行SQL实验简单举例 说明:实验按顺序进行.前后存在关联性.阅读时请注意.打开文件夹更便于查看. 构造实验环境: SQL> select count(*) from emp; COUNT(*) ---------- 14 SQL> alter table EMP drop constraint PK_EMP CASCADE; --删除主键约束 SQL> insert into EMP select * from EMP; --向EMP表中插入反复行 SQL> commit;

SQL Server删除重复行的6个方法

SQL Server删除重复行是我们最常见的操作之一,下面就为您介绍六种适合不同情况的SQL Server删除重复行的方法,供您参考. 1.如果有ID字段,就是具有唯一性的字段 delect   table  tableName  where   id   not   in   (   select   max(id)   from   table   group   by   col1,col2,col3...   )    group   by   子句后跟的字段就是你用来判断重复的条件,如

sql 删除重复行

1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId in (select peopleId from people group by peopleId having count (peopleId) > 1) 2.删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录 delete from people where peopleId in (selec

Oracle删除重复行

Oracle删除重复行 分类: ORACLE2010-12-12 17:10 423人阅读 评论(0) 收藏 举报 oracletabledeleteintegerinsert.net 查询及删除重复记录的SQL语句1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select * from peoplewhere peopleId in (select   peopleId from   people group by   peopleId having count(

VIM删除重复行

[转贴] VIM删除重复行 下面收录了2篇相关文章 1) 转贴自:http://kangzye.blog.163.com/blog/static/36819223201061705729933/ vim 查找相同的两行,以及删除重复行 要查找相同的两行,先将内容排序,然后查找前一行等于后一行者 :sort /^\(.\+\)$\n\1 如此就找到了,博大精深的VIM   – . – 删除重复行(先排一下序): :sort:g/^\(.\+\)$\n\1/d 2) 转贴自:http://kangz

文本删除重复行(UltraEdit)

问题:给定文本如下,文本行包含重复行,给文本排序并删除重复行 操作方法:[编辑]-->[排序]-->[高级排序/选项]如下: 如下图为排序删除重复后结果图: 原文地址:https://www.cnblogs.com/wleyang/p/8696000.html

如何用UE(UltraEdit)删除重复行?--转

原文地址:https://www.zhengjie.com/question/bb148773 使用UE(UltraEdit)的高级排序功能就可以删除掉所有的重复行. 操作步骤 1.文件—排序(R)—高级排序/选项(A). 2.在弹出的“高级排序/选项”对话框中勾选“删除重复项”—根据自己的需要选择升序或降序—点击“排序”按钮. 3.高级排序后的结果,已经将重复的数据全部删除.

SqlServer_删除重复行只保留一条记录

前提:相同的数据重复往数据库写入,导致存在仅主键Id不同的重复数据,现在需要去除重复数据,仅保留重复数据中Id最大的一条 思路: 1.找出存在重复数据的记录,并取重复数据中最大的Id值 2.删除记录中不包含最大Id值的记录 实现: DELETE FROM [Log_IIS].[dbo].[IISLog_table] WHERE id not in (select MAX(Id) from [IISLog_table] group by [RequestTime] ,[LogFilename] ,

数据库删除重复数据 sql

delete from `user`where id in( SELECT * from(select id from `user` WHERE id not in (select min(id) from `user` group by names having count(names)>1) ) tep) 红色为查询出重复数据的id作为要删除的数据条件 原文地址:https://www.cnblogs.com/libiao-libar/p/9744700.html