仅在一个表中求和-Mysql

仅在一个表中求和-Mysql,mysql,Mysql,我有以下情况。我正在建立一个库存控制系统,通过它,我控制产品的进出 在一个表中,我有产品(代码、说明) 在另一个表中,记录产品的移动(代码、产品代码、类型[输入、输出]、数量、日期) 当我试图计算得到的东西时,得到的东西越少,它就不起作用 我的查询: SELECT SUM(s1.quantity) - SUM(s2.quantity) FROM `stock_movement` AS s1 JOIN `stock_movement` AS s2 ON s1.code_product = s2.

我有以下情况。我正在建立一个库存控制系统,通过它,我控制产品的进出

在一个表中,我有产品(代码、说明)

在另一个表中,记录产品的移动(代码、产品代码、类型[输入、输出]、数量、日期)

当我试图计算得到的东西时,得到的东西越少,它就不起作用

我的查询:

SELECT SUM(s1.quantity) - SUM(s2.quantity)
FROM `stock_movement` AS s1
JOIN `stock_movement` AS s2 
ON s1.code_product = s2.code_product
WHERE s1.type = 'IN'
AND s2.type = 'OUT';
| CODE | CODE_PRODUCT | TYPE | QUANTITY | DATA |
| 1 | 30 | IN | 20 | 2018-01-20 |
| 2 | 30 | IN | 40 | 2018-02-03 |
| 3 | 30 | OUT | 10 | 2018-01-20 |
| 4 | 30 | OUT | 10 | 2018-02-03 |
结果:80

这里正确的结果应该是(40+20)-(10+10)=40,但此查询考虑到所有输入都是输入和输出类型,因此结果为80

有人知道我做错了什么吗?下表数据如下:

表格库存\u移动:

SELECT SUM(s1.quantity) - SUM(s2.quantity)
FROM `stock_movement` AS s1
JOIN `stock_movement` AS s2 
ON s1.code_product = s2.code_product
WHERE s1.type = 'IN'
AND s2.type = 'OUT';
| CODE | CODE_PRODUCT | TYPE | QUANTITY | DATA |
| 1 | 30 | IN | 20 | 2018-01-20 |
| 2 | 30 | IN | 40 | 2018-02-03 |
| 3 | 30 | OUT | 10 | 2018-01-20 |
| 4 | 30 | OUT | 10 | 2018-02-03 |

桌上存货:

SELECT SUM(s1.quantity) - SUM(s2.quantity)
FROM `stock_movement` AS s1
JOIN `stock_movement` AS s2 
ON s1.code_product = s2.code_product
WHERE s1.type = 'IN'
AND s2.type = 'OUT';
| CODE | CODE_PRODUCT | TYPE | QUANTITY | DATA |
| 1 | 30 | IN | 20 | 2018-01-20 |
| 2 | 30 | IN | 40 | 2018-02-03 |
| 3 | 30 | OUT | 10 | 2018-01-20 |
| 4 | 30 | OUT | 10 | 2018-02-03 |
|代码|说明|


|30 | TEST|u PRODUCT |

您不需要在此处自联接,只需使用条件聚合:

SELECT
    CODE_PRODUCT,
    SUM(CASE WHEN TYPE = 'IN'  THEN QUANTITY ELSE 0 END) -
    SUM(CASE WHEN TYPE = 'OUT' THEN QUANTITY ELSE 0 END) AS diff
FROM stock_movement
GROUP BY CODE_PRODUCT;

请注意,我是按产品聚合的。对于您的特定样本数据集,只有一个产品,因此我们可以删除
分组依据
,并获得相同的结果。但实际上,您可能需要一个处理多个产品的解决方案。

当您加入stock\u movement时,您想做什么?谢谢!!工作!!