您的位置:首页 > 数据库

【SQL】删除表中重复数据

2015-10-14 22:08 363 查看
已emp表为基础,复制创建一张表,用于试验:

select * from emp;

create table emp_copy as select * from emp;

insert into emp_copy select * from emp;

insert into emp_copy select * from emp;

很明显,emp_copy中比原来emp中每条记录重复了三次。那么如何删除这三条记录呢?

原理:要根据所有字段来分组再升序排序,然后求得每个组的排序序号不为1的rowid,再然后关联原表通过rowid删除这些记录即可:

delete from emp_copy

 where rowid in (select newid

                   from (select rowid as newid,

                                a.empno,

                                a.ename,

                                a.job,

                                a.mgr,

                                a.hiredate,

                                a.sal,

                                a.comm,

                                a.deptno,

                                row_number() over(partition by a.empno, a.ename, a.job, a.mgr, a.hiredate, a.sal, a.comm, a.deptno order by rowid) as rid

                           from emp_copy a)

                  where rid <> 1);

需要注意的时候,在分组的字段中,不能出现非常规的类型列(如大字段lob类型)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: