现在有个百万条数据量的表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 (新插入的一条)由于数据量比较大,用什么样的方法做比较快?
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 (新插入的一条)由于数据量比较大,用什么样的方法做比较快?
select pName,pNum,pTotal from Btruncate table Binsert into B(pName,pNum,pTotal)
select pName,pNum,sum(pTotal) as pTotal from A group by pName,pNum
先将b表的数据转移到a表,清b表数据,然后又重新写回b表了。
b表的数据是对了,只是a表的数据就多了。通过建临时表的方式转移b表数据,再与a表union,应该可以消除了。
先创建一个表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 否则数据库会自动清除重复的数据