MySql table 的发行、收据和余额

Issue, Receipt and Balance from MySql table

我有两个 tables,发货和收货,我在那里发货和接收数量:

问题表:

Order Type Qty
OD12 A 48
OD19 A 33
OD12 B 14

收据表:

Order Type Qty
OD12 A 20
OD19 A 15
OD12 B 11

我想要的结果:

余额:

Order Type Qty
OD12 A 28
OD19 A 18
OD12 B 03

IssueTable 包含已发出订单的详细信息,一个订单可以有多个“Type”的产品。同样,ReceiptTable 包含已完成和收到的订单的详细信息。我想要一个余额 table,它根据订单和类型从收货数量中减去发货数量。

您可以尝试使用连接方法:

SELECT it.`Order`, it.Type, it.Qty - rt.Qty AS Qty
FROM IssueTable it
INNER JOIN ReceiptTable rt
    ON rt.`Order` = it.`Order` AND rt.Type = it.Type;

此答案假设每个订单都有匹配的收据。如果不是,该方法可能必须根据您的期望略有改变。作为旁注,ORDER 是 MySQL 中的保留关键字,您应该避免使用它命名您的列和表。

SELECT `Order`, 
       `Type`, 
       COALESCE(IssueTable.Qty, 0) - COALESCE(ReceiptTable.Qty, 0) Qty
FROM ( SELECT `Order`, `Type` FROM IssueTable
       UNION 
       SELECT `Order`, `Type` FROM ReceiptTable ) TotalTable
LEFT JOIN IssueTable USING (`Order`, `Type`)
LEFT JOIN ReceiptTable USING (`Order`, `Type`);

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=cafd416abcbf7ab31f54bf6efbd6566f

查询假定 (Order, Type) 在每个单独的 table 中是唯一的。如果不是,则在 tables 本身时使用聚合子查询。