请问那位可以解释一下这个SQL语句

shawls 2007-11-14 10:01:02

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);

这个语句的目的是删除重复的数据
但是这个语句我完全无法读懂到底是什么意思

请问那位高手能给我解释一下么?
...全文
117 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fxianxian 2007-11-17
  • 打赏
  • 举报
回复
一看曉得是查找重復紀錄的
有好幾種方法
建議看哈這個博客http://jack198409.itpub.net/
SheLiZi 2007-11-17
  • 打赏
  • 举报
回复
delete test1 A where rowid <>( SELECT MIN(ROWID) FROM TEST1 B WHERE A.mobliephone = B.mobliephone ), 其中mobliephone表示重复条件,可扩展
fsecatk 2007-11-15
  • 打赏
  • 举报
回复
这个语句效率好低啊
而且扩展不太好啊,如果我认为其他几个字段相同的纪录属于重复纪录怎么办?

达人,给各高效的语句阿
bobfang 2007-11-15
  • 打赏
  • 举报
回复
分区中按userid的逆序排序。这个语句的目的是只保留每个mobilephone一条记录,删除同一个mobilephone的userid小的记录,如果userid也相同就只保留一条记录。
hy309 2007-11-14
  • 打赏
  • 举报
回复
首先是一个分析查询,通过mobliephone分区;它使用ROW_NUMBER()给每个分区进行编号。
如果没有重复的内容,分区就只有一个行,编号是 “1”。但是,如果存在重复,那么它们就会被编上2、3等号码。
这个查询还会返回用来唯一识别数据行的ROWID。
第一个查询然后就被用作另外一个查询的内联视图,
这第二个查询使用一个WHERE子句过滤掉“1”行,只返回重复的内容。
最后,一个DELETE语句通过第二个查询使用IN操作符来删掉所有的重复内容。

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧