日期:2014-05-17  浏览次数:20392 次

sql 两张表的并集运算
有两张表格,a,b,
a中有盘点数量,b中有库存数量
我想实现的功能是,a,b两张表做差,差异不为零的话就把这条记录写入b表中,要是b或者a中的商品不一样的话,也写入b中
怎么实现,请给代码,谢谢谢谢

------解决方案--------------------
参考:
http://www.cnblogs.com/insus/articles/1925770.html
------解决方案--------------------
SQL code

--创建表结构
select 商品,库存数量 into b_copy from b where 1=2;
--合并结果放到中间表
insert into b_copy(商品,库存数量)
    select t.商品,abs(sum(t.数量))
    from (select a.商品,(a.盘点数量*-1) 数量 from a
        union all select b.商品,b.库存数量
    ) t
    group by t.商品
    having sum(t.数量)<>0;
--按合并后的数量更新b表
update b set 库存数量=b_copy.库存数量
    from b_copy
    where b.商品=b_copy.商品;
--插入b表不存在的商品
insert into b(商品,库存数量)
    select 商品,库存数量
    from b_copy 
    where b_copy.库存数量<>0 and
         not exists (select 1 from b_copy 
        where b_copy.商品=b.商品);
--删除中间表
drop table b_copy;