Oracle 中去掉重复项问题,两种方式对比 那个更快 还有没有更快的 求指导

安得权 2015-08-28 03:59:36
语句1:

delete from temp_goods_201503200331 where rowid not in (select min(rowid) from temp_goods_201503200331 group by HSCODE,NAME having count(name)>=1)


语句2:

DELETE FROM temp_goods_201503200331 d
  WHERE rowid >

( SELECT min(rowid)
  FROM temp_goods_201503200331 t
  WHERE
t.hscode = d.Hscode and t.name=d.name
)
...全文
157 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
对于数据库来说,按照一定的排序条件select 结果,然后扫描“一趟”就可以把重复的找出来(因为它与“最后记录”不一样,说明不是重复的;反之就是重复的)。
  • 打赏
  • 举报
回复
这种代码一般也就执行一次,或者定期执行个几次,而执行跨度往往也比较大,你可以在实际环境下执行预估计划,看是否会对生产环境造成破坏性的影响,但一般来说不会有啥影响
  • 打赏
  • 举报
回复
第一个才是正确的,第二个只删除大于最后一个min(id)的数据
bj_liliang 2015-08-28
  • 打赏
  • 举报
回复
既然你发在了C# 贴吧 ,那么我就认为你是想用C# 写一段程序来解决这个问题 首先,第一种肯定是不可取的,子查询尽量少用。处理大量的数据也是最好不要用。 思路: 一、 循环 每次去数据库查第一条数据出来,然后用sql 语句,去数据库中,有相同的就删除掉 这样越删越少,也就会越删越快 二、 当然,纯粹的SQL语句也是可以实现的。需要用到开窗函数,查到一条数据的时候就会判断是不是重复,不重复前面序号写1,重复就写2、3.。。。去百度一下开窗函数吧。
无涯大者 2015-08-28
  • 打赏
  • 举报
回复
引用 1 楼 fengqingtao2008 的回复:
到Oracle 社区去 问下,这里是SQL server社区!
这里是 C# 社区,看走眼了!!!
无涯大者 2015-08-28
  • 打赏
  • 举报
回复
到Oracle 社区去 问下,这里是SQL server社区!

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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