两张表中有相同数据字段也有不同的,怎样查询出两张表全部数据并计算出其中一列的差

A表                                   B表                               C 结果表                
货架号    编码  数量        货架号    编码  数量        货架号    编码   A表数量   B表数量    A-B差
H001    123    1               H001    123    1              H001      123         3            4             -1
H001    456    2               H001    456    2              H001      456         5            6             -1
H001    123    2               H001    123    3              H001      567         5            2              3
H001    456    3               H001    456    4              H001      789         2            5             -3
H001    567    2               H001    567    2              H001      788         5            0              5
H001    789    3               H001    789    5              H001      455         0            6             -6
H001    567    3               H001    455    6                        
H001    789    2               H002    321    2              
H001    778    5               H002    322    5                        
H002    321    2               H002    321    3                        
H002    322    3               H002    322    6                        
H002    321    3               H002    334    4                        
H002    322    2                                        
H002    333    3                                        
H002    322    1                                        
H002    333    1                                        

结果表中以货架号H001为例,编码相同的数量汇总。  分别查出A、B表中的数量对比,按C表的格式插入C表中。

select 货架号,编码,sum(if(flag=1,数量,0)) as A数量,sum(if(flag=2,数量,0)) as B数量,sum(if(flag=1,数量,0))-sum(if(flag=2,数量,0)) as A数量-B数量 from (select 货架号,编码,数量,1 as flag from A表 union all select 货架号,编码,数量,2 as flag from B表) group by 1,2;