Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql sql中两个不同表之和的差异_Mysql_Sql_Join_Left Join_Right Join - Fatal编程技术网

Mysql 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

我有两个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 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