delete from tab
where tab.rowid not in 
  (
    select ddd.rowid
    from tab ddd,
      (select col1,col2,col3 from tab group by col1,col2,col3) bbb
    where tab.rowid=
      (
        select ccc.rowid
        from tab ccc 
        where ccc.col1=bbb.col1
          and ccc.col2=bbb.col2 
          and ccc.col3=bbb.col3 
          and rownum=1
      )
  )
重复记录的第一条会被保留下来