delete test1 where rowid in(
select rid from
(select rowid rid,row_number() 
over(partition by mobliephone order by userid desc) 
rn from test1)
where rn>1);这个语句的目的是删除重复的数据
但是这个语句我完全无法读懂到底是什么意思请问那位高手能给我解释一下么?

解决方案 »

  1.   

    首先是一个分析查询,通过mobliephone分区;它使用ROW_NUMBER()给每个分区进行编号。
    如果没有重复的内容,分区就只有一个行,编号是 “1”。但是,如果存在重复,那么它们就会被编上2、3等号码。
    这个查询还会返回用来唯一识别数据行的ROWID。
    第一个查询然后就被用作另外一个查询的内联视图,
    这第二个查询使用一个WHERE子句过滤掉“1”行,只返回重复的内容。
    最后,一个DELETE语句通过第二个查询使用IN操作符来删掉所有的重复内容。
      

  2.   

    分区中按userid的逆序排序。这个语句的目的是只保留每个mobilephone一条记录,删除同一个mobilephone的userid小的记录,如果userid也相同就只保留一条记录。
      

  3.   

    delete   test1 A  where   rowid <>( SELECT MIN(ROWID) FROM TEST1 B WHERE A.mobliephone = B.mobliephone ), 其中mobliephone表示重复条件,可扩展
      

  4.   

    一看曉得是查找重復紀錄的
    有好幾種方法
    建議看哈這個博客http://jack198409.itpub.net/