如何去掉表中的重复记录

                                                                                    在Oracle11g中实验成功!        

第一种,数据全部重复,如下图:

                       

       需要得到以下的结果:

                       

       删除重复的记录(重复记录保留1条),可以按以下方法删除

         方法一:                     create   table   tablea_bak  as  select   distinct(a.*)   from   tableA   a   
                                  然后drop以前那个表  
                                  最后rename   tableA_bak   to   tableA      
                                  最好在不用这张表的时候。缺点:原表的注释将丢失。

 

      方法二:                delete from test where (id,name,ROWID) not in (select id,name,min(rowid) from test  group by id.name;
                                  id,name是test的字段,如果test有多个字段,要全部列出来。

 

      方法三(推荐):    delete from test  q1 WHERE rowid > (select min(rowid)  from  test q2
                                  where q1.id= q2.id and q1.name = q2.name group by id,name );                  

                                  该方法效率高于方法二。

       ......

       .....

       ......

 

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

      第二种,数据部分字段重复,ID不重复 ,如下图:

 

                                        

             需要得到以下结果:

                                      

           下面的语句可以达到要求:                

                方法一: create   table   tablea_bak  as  select   distinct(a.*)   from   tableA   a   
                        然后drop以前那个表  
                        最后rename   tableA_bak   to   tableA      
                        最好在不用这张表的时候。缺点:原表的注释将丢失。

 

            方法二(推荐):delete   from   tab_name   a   where   rowid   >   (select   min(rowid)   from   tab_name   b   where   a.关键字    =   b.关键字   group   by   关键字)

                       此方法的执行顺序:先按 group by 关键字 分组,分完组后,按组执行delete;   

                       此方法可以保留rowid最小的记录。

                       类推:保留rowid最大的记录   delete   from   tab_name   a   where   rowid   <   (select   max(rowid)   from   tab_name   b   where   a.关键字    =   b.关键字   group   by   关键字)

 

            方法三:delete from test where (name,ROWID) not in (select name,min(rowid) from test  group by name)   
                       name是test的重复字段,如果test有多个重复字段,要全部列出来。

 

 

       ......

       .....

       ......

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值