【SQL】删除表中重复数据

已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类型)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值