要删除tmp表中val值相同但是id不等于max(id)的记录,通常有两种方法:1)直接delete
DELETE      tmp t
      WHERE ID != (SELECT MAX (ID)
                     FROM tmp
                    WHERE val = t.val);2) 导出不重复纪录到临时表,清空原表,然后导回
CREATE TABLE t1 AS
SELECT *
FROM tmp t
WHERE ID = (SELECT MAX(ID) FROM tmp WHERE val=t.val);TRUNCATE TABLE tmp;INSERT INTO tmp
   SELECT *
     FROM t1;DROP TABLE t1;

解决方案 »

  1.   

    good!!
    如何优化Oracle表. ? 呢 ?
      

  2.   

    建议楼主还是采用第二种方法,我有次对上千万记录的表删除重复数据,当时用rowid来判断,类似第一种方法,结果一条delete语句做了一天一夜也没执行完,郁闷了
      

  3.   

    里面有Long 类型的数据段, 表分区不行.. 有很多操作不能做了。