ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle

oracle

原创 Linux操作系统 作者:e_soft 时间:2009-05-04 19:41:25 0 删除 编辑

问怎样找出一个表中存在的重复记录

select   fname,count(*)   from   customer_tab   group   by   fname   having   count(*)>1;

 

 删除重复数据      
     
  一、具有主键的情况      
  a.具有唯一性的字段id(为唯一主键)      
  delect     table          
  where     id     not     in          
  (      
  select     max(id)     from     table     group     by     col1,col2,col3...      
  )      
  group     by     子句后跟的字段就是你用来判断重复的条件,如只有col1,      
  那么只要col1字段内容相同即表示记录相同。      
     
  b.具有联合主键      
  假设col1+','+col2+','...col5     为联合主键      
  select     *     from         table     where     col1+','+col2+','...col5     in     (      
        select     max(col1+','+col2+','...col5)     from     table          
  where     having     count(*)>1      
  group     by     col1,col2,col3,col4          
  )      
  group     by     子句后跟的字段就是你用来判断重复的条件,      
  如只有col1,那么只要col1字段内容相同即表示记录相同。      
     
     
  or      
  select     *     from     table         where     exists     (select     1     from     table     x     where     table.col1     =     x.col1     and          
  table.col2=     x.col2     group     by     x.col1,x.col2     having     count(*)     >1)      
     
  c:判断所有的字段      
        select     *     into     #aa     from     table     group     by     id1,id2,....      
        delete     table          
        insert     into     table          
        select     *     from     #aa      
     
  二、没有主键的情况      
     
  a:用临时表实现      
  select     identity(int,1,1)     as     id,*     into     #temp     from     ta      
  delect     #temp          
  where     id     not     in          
  (      
        select     max(id)     from     #     group     by     col1,col2,col3...      
  )      
  delete     table     ta      
  inset     into     ta(...)      
            select     .....     from     #temp      
     
  b:用改变表结构(加一个唯一字段)来实现      
  alter     table     表     add         newfield     int     identity(1,1)      
  delete     表      
  where     newfield     not     in      
  (      
  select     min(newfield)     from     表     group     by     除newfield外的所有字段      
  )      
     
  alter     table     表     drop     column     newfield      

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21220558/viewspace-592571/,如需转载,请注明出处,否则将追究法律责任。

上一篇: DBA命令
下一篇: 逻辑卷管理
请登录后发表评论 登录
全部评论

注册时间:2009-03-26

  • 博文量
    28
  • 访问量
    23927