网上看到一道sql查询题所做的总结
求表AAA中剩余的库存量。
Sql语句(1)
SELECT mc,SUM(s1)as 剩余数量 FROM ( SELECT [mc],([s1]) as s1 FROM AAA UNION all SELECT [mc],(-[s1]) as s1 FROM BBB) List GROUP BY mc
把两个表联合起来组成一个结果,把出库的数量转化为负的,然后再求和。
注意,此处必须用union all ,不能用union,union和union all 的区别是union会把联合起来的重复记录删除掉,所以不能用union,两个表的结构必须相同。
扩充:except 也是连接两个sql语句,就是获取AAA表中的在BBB表中没有的记录行,两个表的结构必须相同,except all是不消除重复的,但是在有的sql版本中不能用。
intersect恰好同except 相反,他是获取两个sql中AAA表中有,BBB表中也有的记录行,两个表的结构必须相同,intersect all是不消除重复的,但是在有的sql版本中不能用。
sql语句(2)
select mc ,s1-(select sum(s1) from bbb where mc=aaa.mc group by mc) from aaa