百万数据写库,效率问题?

wgd 2005-12-07 09:35:55
现在有个百万条数据量的表a,结构如下:
pName pNum pTotal
computer 1 30
netbook 3 50
computer 2 20
......

现在要把这个表的数据插入到另一个表b
pName pNum pTotal
computer 3 10
另一个表和这个表结构相同,只不过存的总数
要求如果pName相同的就累加,如果在b表中没有的pName就插入一条新的pName
即结果如下:
pName pNum pTotal
computer 6 60
netbook 3 50 (新插入的一条)

由于数据量比较大,用什么样的方法做比较快?
...全文
143 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wgd 2005-12-07
  • 打赏
  • 举报
回复
libin_ftsafe:您好,能不能不清b表的数据来实现这个?
wgd 2005-12-07
  • 打赏
  • 举报
回复
能不能 不用truncate table B 来实现这个功能
子陌红尘 2005-12-07
  • 打赏
  • 举报
回复
insert into A(pName,pNum,pTotal)
select pName,pNum,pTotal from B

truncate table B

insert into B(pName,pNum,pTotal)
select pName,pNum,sum(pTotal) as pTotal from A group by pName,pNum
liudeyun 2005-12-07
  • 打赏
  • 举报
回复
楼上的两位的方法都很好啊!这里在给出一个语句,其实和你们的是一样的
先创建一个表c 结构和a、b一样,然后
insert into c
select pName as nName,sum(pNum) as pNum,sum(pTotal) as pTotal from(
select pName,pNum,pTotal from a
union all
select pName,pNum,pTotal from b
) group by pName
最后修改表名
注意:一定要用union all 否则数据库会自动清除重复的数据

lovezhu 2005-12-07
  • 打赏
  • 举报
回复
libin_ftsafe的思路很好啊!
先将b表的数据转移到a表,清b表数据,然后又重新写回b表了。
b表的数据是对了,只是a表的数据就多了。通过建临时表的方式转移b表数据,再与a表union,应该可以消除了。

17,088

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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