Mysql sql中两个不同表之和的差异
我有两个sql表,Mysql sql中两个不同表之和的差异,mysql,sql,join,left-join,right-join,Mysql,Sql,Join,Left Join,Right Join,我有两个sql表,purchase和sent,我想知道任何日期项目的未付余额。对于这一点,我试着取sum(puchase.quantity)-sum(sent.quantity),其中date我想你需要这个 这里是工作演示 CREATE TABLE sent ( item int, quantity int ); CREATE TABLE purchase ( item int, quantity int ); insert into sent values(1,4); insert int
purchase
和sent
,我想知道任何日期项目的未付余额。对于这一点,我试着取sum(puchase.quantity)-sum(sent.quantity),其中date我想你需要这个
这里是工作演示
CREATE TABLE sent
(
item int,
quantity int
);
CREATE TABLE purchase
(
item int,
quantity int
);
insert into sent values(1,4);
insert into sent values(2,7);
insert into sent values(3,9);
insert into sent values(4,5);
insert into sent values(5,9);
insert into purchase values(1,2);
insert into purchase values(2,5);
insert into purchase values(3,3);
insert into purchase values(4,2);
insert into purchase values(5,7);
select sent.item , (sum(IFNULL(sent.quantity,0)) - sum(IFNULL(purchase.quantity,0))) as diff
FROM sent , purchase Where sent.item = purchase.item group by sent.item
也许有一种更简洁的方法可以得到你想要的,但是folliwing应该给你正确的结果:
SELECT s.item,
s.qty as total_sent,
COALESCE(p.qty,0) as total_purchase,
s.qty - COALESCE(p.qty,0) as stock
FROM
(
SELECT item, sum(quantity) as qty
FROM sent
GROUP BY item
) s
LEFT JOIN
(
SELECT item, sum(quantity) as qty
FROM purchase
GROUP BY item
) p
ON p.item = s.item
我会写一个类似的解决方案。如果你将使用外连接而不是笛卡尔乘法,那么我将投票支持你的答案。如果我们不止一次购买一件物品,这是行不通的。。。e、 例如,在我的例子中,我三次购买了一件物品,而不是正确答案18,查询结果是54..ok,@AliHaider,那么请创建一个查询,其中求和查询是子查询,结果关系命名为t1和t2。使用项上的联接条件联接它们,它应该会起作用。@LajosArpad,我在sql方面真的很弱,你能给我看看查询吗。这会有很大的帮助。不是真的,因为我没有时间测试它,如果有错别字,我会得到选票。@AliHaider。没问题
SELECT s.item,
s.qty as total_sent,
COALESCE(p.qty,0) as total_purchase,
s.qty - COALESCE(p.qty,0) as stock
FROM
(
SELECT item, sum(quantity) as qty
FROM sent
GROUP BY item
) s
LEFT JOIN
(
SELECT item, sum(quantity) as qty
FROM purchase
GROUP BY item
) p
ON p.item = s.item