我的表是这样的:
表名:info
表结构如下:
  
    id     name     sex      birthday     
    1      小龙     男       1987-9-7
    1      小龙     男       1987-9-7
    2      小红     女       1988-10-3
    2      小红     女       1988-10-3
    3      小猪     男       1990-9-10
    3      小猪     男       1990-9-10
其中id为主键,如何删除表中的重复记录呢

解决方案 »

  1.   

    名义上是主键
    delete from info where rowid not in
     (select min(rowid) from info group by id, name, ...)
      

  2.   

    delete  from info a 
    where rowid<>(select max(rowid) from info b
    where a.id=b.id);
      

  3.   

    --保留重复行的一条
    delete from a
    where rowid in (
    select rid
    from (
    select id,name,sex,birthday,rowid rid,row_number() over(partition by id,name,sex,birthday order by rowid) rn
    from a) where rn=1)--删除所有的重复行
    delete from a
    where rowid in (
    select rid
    from (
    select id,name,sex,birthday,rowid rid,count(*) over(partition by id,name,sex,birthday) rn
    from a) where rn>1)
      

  4.   

    不用那么麻烦调用分析函数delete from info
    where rowid not in
    (
    select max(rowid) from info group by id
      
    )  
    )
      

  5.   

    不如从插入源, 从根本上解决问题, 可以为name建一个unique索引, id值由sequence提供..
      

  6.   

    抱歉 zxf_feng
     本来是要给你加分的,缺给加错了
      

  7.   

    楼主
    学oracle不要一味追求使用高级指令和函数
    当能同样能实现一个功能的时候,代码越简单,执行效率越高,就越实用
    尤其对企业而言,这很重要