Mysql SQL从不同的表中减去

Mysql SQL从不同的表中减去,mysql,sql,Mysql,Sql,我根据ID从不同的表中减去值 这就像是一个清单,我有ITEN输入和输出的表格 我想做的是根据iten的ID减去iten In-iten Out 我设法做到了这一点,但是如果一个Iten只作为一个In-movement,那么查询只会显示一个空行,当它应该显示In-movement-Out时刻时,即使它不存在也应该被视为0,在这种情况下只显示In-movement的值 有人能帮忙吗 每个表中的每一行代表一项 表-in_使用 id\u项目\uuuuuuqnt 1\uuuuuuu500 2______

我根据ID从不同的表中减去值

这就像是一个清单,我有ITEN输入和输出的表格

我想做的是根据iten的ID减去iten In-iten Out

我设法做到了这一点,但是如果一个Iten只作为一个In-movement,那么查询只会显示一个空行,当它应该显示In-movement-Out时刻时,即使它不存在也应该被视为0,在这种情况下只显示In-movement的值

有人能帮忙吗

每个表中的每一行代表一项


表-in_使用

id\u项目\uuuuuuqnt
1\uuuuuuu500
2_______;1000

使用的表格

id\u项目\uuuuuuqnt
1 200

预期产量

二手货

id\u项目\uuuuuqnt
1_____;300
2_________;1000(没有向外移动,因此它应该只显示在一个内)

选择
in_used.qnt-out_used.qnt作为已用库存
从…起
内连接
out\u用于in\u used.id\u项目=out\u used.id\u项目

听起来你想要这样的东西:

select item, sum(inc)
from ((select item, in_used as inc
       from items_in
      ) union all
      (select item, - out_used as inc
       from items_out
      )
     ) ii
group by item;

我不确定这两个表中的每一行是否代表一项,或者是否有计数器。如果有计数器,则应使用该计数器,而不是
1
/
-1

听起来您需要这样的计数器:

select item, sum(inc)
from ((select item, in_used as inc
       from items_in
      ) union all
      (select item, - out_used as inc
       from items_out
      )
     ) ii
group by item;

我不确定这两个表中的每一行是否代表一项,或者是否有计数器。如果有计数器,则应使用该计数器,而不是
1
/
-1

如果每个id有多条记录,则可以使用sum(),如果两个表上都没有记录,则必须使用完全联接,否则可以使用左联接

Select
    id_item , coalesce(sum(in_used.qnt),0) - coalesce(sum(out_used.qnt),0) As used_Stock
From
    in_used FULL Join
    out_used On in_used.id_item = out_used.id_item
GROUP BY id_item 

如果每个id有多条记录,则可以使用sum(),如果两个表上都没有记录,则必须使用FULL JOIN,否则可以使用LEFT JOIN

Select
    id_item , coalesce(sum(in_used.qnt),0) - coalesce(sum(out_used.qnt),0) As used_Stock
From
    in_used FULL Join
    out_used On in_used.id_item = out_used.id_item
GROUP BY id_item 

在这种情况下,我们知道在所有情况下,联接结果都有id_项,并且没有一个是空的:

SELECT I.id_item,
    SUM(I.qnt) - SUM(O.qnt) AS used_Stock
FROM in_used AS I
JOIN out_used AS O ON I.id_item = O.id_item
GROUP BY id_item
但对于一般结果,您可以尝试以下查询:

SELECT (CASE
        WHEN I.id_item IS NOT NULL THEN I.id_item
        ELSE O.id_item
    END) AS id_item,
    SUM(I.qnt) - SUM(O.qnt) AS used_Stock
FROM in_used AS I
JOIN out_used AS O ON I.id_item = O.id_item
GROUP BY id_item

希望这对你有用

在这种情况下,我们知道在所有情况下,联接结果都有id_项,并且没有一个是空的:

SELECT I.id_item,
    SUM(I.qnt) - SUM(O.qnt) AS used_Stock
FROM in_used AS I
JOIN out_used AS O ON I.id_item = O.id_item
GROUP BY id_item
但对于一般结果,您可以尝试以下查询:

SELECT (CASE
        WHEN I.id_item IS NOT NULL THEN I.id_item
        ELSE O.id_item
    END) AS id_item,
    SUM(I.qnt) - SUM(O.qnt) AS used_Stock
FROM in_used AS I
JOIN out_used AS O ON I.id_item = O.id_item
GROUP BY id_item

希望这对你有用

如果
id\u项
in\u used
中是唯一的,并且在
out\u used
中最多有一行,那么您只需要一个
连接和
合并()

如果有更多行,还可以使用聚合:

select i.id_item, 
       sum(i.qnt) - coalesce(sum(o.qnt), 0) used_Stock
from in_used i left join out_used o
on i.id_item = o.id_item
group by i.id_item

如果
id\u项
in\u used
中是唯一的,并且在
out\u used
中最多有一行,那么您只需要一个
连接和
合并()

如果有更多行,还可以使用聚合:

select i.id_item, 
       sum(i.qnt) - coalesce(sum(o.qnt), 0) used_Stock
from in_used i left join out_used o
on i.id_item = o.id_item
group by i.id_item

请提供样本数据和预期结果。现有查询也很有用。请显示表架构、示例数据、当前查询、当前输出和所需输出。请提供示例数据和所需结果。您现有的查询也很有用。显示表架构、示例数据、当前查询、当前输出和所需输出。我不确定是否理解您的解决方案。。。我已经更新了question@xela05 . . . 我不确定
union all
group by
有什么难以理解的地方。注意:这适用于所有项目,即使是仅在一个表中的项目。不确定我是否理解您的解决方案。。。我已经更新了question@xela05 . . . 我不确定
union all
group by
有什么难以理解的地方。注意:这适用于所有项目,即使是仅在一个表中的项目。您提供的解决方案不起作用。。。左侧连接越来越近,但显示的是一个空行,而不是IN值对不起,缺少coalesce:-)您提供的解决方案不起作用。。。左连接越来越近,但显示的是一个空行,而不是IN值对不起,缺少coalesce:-)