delete from test
where rowid 
in 
(
select min(rowid) from test group by a1,a2
)

解决方案 »

  1.   

    1,看对重复记录的定义,一般你一个表中间有某几个字段重复就算重复了,不一定是没个字段都一样才算重复。所以你的WHERE后面的字段一般只有几个列就可以了,看你自己的逻辑。
    2,8I后建议试着使用以下方法:
    delete test where rowid in (
    select rid from
    (select rowid rid,row_number() over(partition by a1,a2 order by a1 desc) rn from test)
    where rn > 1);
    由于有一个SORT,在删除时建议调大SESSION的SORT_AREA_SIZE(9i自动PGA管理的化,PGA总量足够大就可以了)
    3,如果大量都是重复的,还是干脆做temp表吧:-)
      

  2.   

    delete from test
    where rowid =(select max(rowid) from test group by a1,a2)