Oracle 下删除重复数据测试

Oracle 测试删除重复数据


SQL>create table test 
   (na1 int,na2 int,na3 int,na4 int,na5 int,na6 int,na7 int,na8 int,na9 int);

SQL>insert into test values ('1','1','1','1','1','1','1','1','1');
SQL>insert into test values ('1','1','1','1','1','1','1','1','2');
SQL>insert into test values ('1','1','1','1','1','1','1','1','3');
SQL>insert into test values ('1','1','1','1','1','1','1','1','4');



SQL> select * from test;

       NA1        NA2        NA3        NA4        NA5        NA6        NA7        NA8        NA9
---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
         1          1          1          1          1          1          1          1          1
         1          1          1          1          1          1          1          1          1
         1          1          1          1          1          1          1          1          1
         1          1          1          1          1          1          1          1          1
         1          1          1          1          1          1          1          1          2
         1          1          1          1          1          1          1          1          3
         1          1          1          1          1          1          1          1          3
         1          1          1          1          1          1          1          1          4
         1          1          1          1          1          1          1          1          4


删除na9单列重复的字段
delete from  test
where  na9  in (select  na9  from test   group  by  na9   having  count(na9) > 1)
and rowid not in (select min(rowid) from  test  group by na9 having count(na9)>1);


SQL> select * from test;

       NA1        NA2        NA3        NA4        NA5        NA6        NA7        NA8        NA9
---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
         1          1          1          1          1          1          1          1          1
         1          1          1          1          1          1          1          1          2
         1          1          1          1          1          1          1          1          3
         1          1          1          1          1          1          1          1          4



再插入几行重复的数据

SQL>insert into test values ('1','1','1','1','1','1','1','2','4');
SQL>insert into test values ('1','1','1','1','1','1','1','3','4');


SQL> select * from  test;

       NA1        NA2        NA3        NA4        NA5        NA6        NA7        NA8        NA9
---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
         1          1          1          1          1          1          1          2          4
         1          1          1          1          1          1          1          3          4
         1          1          1          1          1          1          1          2          4
         1          1          1          1          1          1          1          1          1
         1          1          1          1          1          1          1          1          1
         1          1          1          1          1          1          1          1          1
         1          1          1          1          1          1          1          1          1
         1          1          1          1          1          1          1          1          2
         1          1          1          1          1          1          1          1          3
         1          1          1          1          1          1          1          1          3
         1          1          1          1          1          1          1          1          4
         1          1          1          1          1          1          1          1          4
         1          1          1          1          1          1          1          3          4

13 rows selected.


删除na9列的重复数据

SQL>delete from  test
    where  na9  in 
   (select  na9  from test   group  by  na9   having  count(na9) > 1)
    and rowid not in 
   (select min(rowid) from  test  group by na9 having count(na9)>1);


SQL> SELECT * FROM TEST;

       NA1        NA2        NA3        NA4        NA5        NA6        NA7        NA8        NA9
---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
         1          1          1          1          1          1          1          2          4
         1          1          1          1          1          1          1          1          1
         1          1          1          1          1          1          1          1          2
         1          1          1          1          1          1          1          1          3



生产情况往往是删除所有字段都重复的数据

SQL> delete from  test  a
  2  where (a.na1,a.na2,a.na4,a.na3,a.na5,a.na6,a.na7,a.na8,a.na9) in  
  3  (select na1,na2,na3,na4,na5,na6,na7,na8,na9 from cz  
  4  group by na1,na2,na3,na4,na5,na6,na7,na8,na9  having count(*) > 1)
  5  and rowid not in 
(select min(rowid) from test group by na1,na2,na3,na4,na5,na6,na7,na8,na9  having count(*)>1);  6  

8 rows deleted.

SQL> select * from test;

       NA1        NA2        NA3        NA4        NA5        NA6        NA7        NA8        NA9
---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
         1          1          1          1          1          1          1          2          4
         1          1          1          1          1          1          1          3          4
         1          1          1          1          1          1          1          1          1
         1          1          1          1          1          1          1          1          3
         1          1          1          1          1          1          1          1          4

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值