如题 表里有很多重复数据
比如  ID      NAME    XB   SFZHM   COL1  COL2
1       张三    男   12345   000   111
2       张三    男   23456   111   222
3       张三    男   67876   333   444
4       李四    女   89876   444   555
5       李四    女   98765   789   234这样的重复数据  NAME和XB是联合主键 只要NAME和XB重复就算重复数据  其他的不管
能不能删除就留一条 

解决方案 »

  1.   

    肯定能啊,而且语句也不复杂,如下:(假设表名是A)
    SQL>delete * from A where SFZHM<>(select max(SFZHM) from A group by NAME,XB);
      

  2.   

    这样可能就只剩下一条数据了,应该是:
    delete from A where rowid not in (select max(rowid) from A group by NAME,XB);
      

  3.   

    方法一般都那几种,利用最小OR最大ROWID,或者分组用分析函数取最小最大ROWNUM之类
    另,1楼指令应当有错吧。
      

  4.   

    如果NAME,XB只有一组记录不会出错,多了确实就game over了还可以用exists去比较删除
      

  5.   

    参照方法,大部分在Oracle都是通用的
    http://topic.csdn.net/u/20080626/00/43d0d10c-28f1-418d-a05b-663880da278a.html
      

  6.   

    如果表里面还包含了很多不重复的数据,判断最大的rowid或最小的rowid的话 会不会把单独的一条不重复记录也给删掉
      

  7.   

    你删除的条件是 不是最大或最小的rowid,自然不会删除单独不重复的记录...
      

  8.   

    肯定是可以处理的,考虑到效率最好用rowid来匹配,原理就是,分组后找出每组最小的rowid或者最大的rowid,然后删除比这个rowid大的或者小的就好了delete * from A where exists(select 1 from (SELECT  max(ROWID),NAME,XB as rowids from A group by NAME,XB) z where z.rowids>a.rowid and z.name=a.name and z.xb=a.xb);