现在有个百万条数据量的表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   (新插入的一条)由于数据量比较大,用什么样的方法做比较快?

解决方案 »

  1.   

    insert into A(pName,pNum,pTotal) 
    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
      

  2.   

    能不能 不用truncate table B 来实现这个功能
      

  3.   

    libin_ftsafe:您好,能不能不清b表的数据来实现这个?
      

  4.   

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

  5.   

    楼上的两位的方法都很好啊!这里在给出一个语句,其实和你们的是一样的
    先创建一个表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 否则数据库会自动清除重复的数据