oracle用rowid去掉重复值
deletefromtesttwhererowidnotin(selectmax(rowid)fromtestpwheret.a=p.aandt.b=p.b);notin...
delete from test t where rowid not in(select max(rowid) from test p where t.a=p.a and t.b=p.b); not in 后面的值是怎么取的。 我理解为max()函数只取到了一个值。求高手指教
展开
1个回答
展开全部
你可以将这个操作看做一个嵌套循环;
对test表的每一条记录,到test中找出所有a,b字段与当前字段一样的记录,找出其rowid最大值,跟当前记录的rowid比较,如果不等于则删除,如果相等,则保留。
所以,本条sql的功能是对所有a,b字段重复的记录,只保留一条。
就是说,本sql等价于下面的sql
delete from test t where rowid not in
(
select max(rowid) from test
group by a,b
)
对test表的每一条记录,到test中找出所有a,b字段与当前字段一样的记录,找出其rowid最大值,跟当前记录的rowid比较,如果不等于则删除,如果相等,则保留。
所以,本条sql的功能是对所有a,b字段重复的记录,只保留一条。
就是说,本sql等价于下面的sql
delete from test t where rowid not in
(
select max(rowid) from test
group by a,b
)
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询