假设有表(dual)如下:Name1     Name2Jason     Melissa
Jason     Shasha
Jason     Sherman
Melissa   Jason
Melissa   Shasha
Shasha    Jason
Shasha    Melissa
Shasha    Sherman
Sherman   Jason
Sherman   ShashaJason     Melissa和Melissa   Jason被认为是重复项,所以删除重复项后的应该为:Name1     Name2Jason     Melissa
Jason     Shasha
Jason     Sherman
Melissa   Shasha
Shasha    Shermandistinct在这里没用,该怎么处理呢?请指教~

解决方案 »

  1.   

    delete from table_name
    where rowid not in (select max(rowid) from table_name
                        group by name1,name2)
      

  2.   

    方法二:
    delete from table_name
    where rowid not in (select rowid from (select row_number()over(partition by name1,name2 order by name1,name2) rn from table_name) where rn=1)
      

  3.   

    测试了下:
    上面的方法不能解决Jason Melissa和Melissa Jason被认为是重复项的问题只能删除完全相同的项
      

  4.   

    delete from dual
    where rowid not in
    (
    select max(rowid) 
    from dual
    group by 
    case when 
    name1=name2 then 1
    end 
    )
      

  5.   

    jzd同学,我试了你的方法,只剩下sherman和shasha这一项而已 其他都被删掉了……
      

  6.   

    SQL> select * from test_1;
     
    NAME1   NAME2
    ------- -------
    Jason   Melissa
    Jason   Shasha
    Jason   Sherman
    Melissa Jason
    Melissa Shasha
    Shasha  Jason
    Shasha  Melissa
    Shasha  Sherman
    Sherman Jason
    Sherman Shasha
    sss     fff
     
    11 rows selected
     
    SQL> select distinct least(name1,name2)name1,greatest(name1,name2)name2 from test_1;
     
    NAME1   NAME2
    ------- -------
    Jason   Shasha
    Shasha  Sherman
    Jason   Sherman
    Melissa Shasha
    Jason   Melissa
    fff     sss
     
    6 rows selected
     
    SQL>