我在检索订单数量减去收到的数量时遇到了问题。连接问题和SUM()
表的基本版本看起来像
order_main
id | status
1 | 2
2 | 1
3 | 3
4 | 2
order_part
id | partid | quantity | status | order_main_id
1 | 12345 | 100 | 2 | 1
2 | 23456 | 20 | 3 | 1
3 | 555 | 15 | 1 | 2
4 | 666 | 10 | 3 | 3
5 | 12345 | 40 | 2 | 4
order_reception
id | order_main_id
1 | 2
2 | 2
3 | 2
4 | 3
order_reception_part
id | partid | quantity | order_reception_id
1 | 12345 | 40 | 1
2 | 23456 | 20 | 1
3 | 12345 | 10 | 2
4 | 12345 | 20 | 3
5 | 666 | 10 | 4
所以基本上我想知道PARTID 12345
多少仍处于缺货。 结果应该像
partid | in_order
12345 | 70
(100 + 40) - (40 + 10 + 20)
我尝试的问题是,当我试图总结我得到了3 * 100的订单数量一个用于每个接收+ 40,因为order_part
不直接链接到order_reception_part
额外的信息状态1 =准备订购,状态2 =有序,3 =接收
我希望我已经解释过它不够好,你了解,否则请问我额外的信息。
下面的查询将说明我的意思,我需要的orp.quantity
的SUM()
每个订单,但结果会显示100,每接待,但我只需要“100” 1周时间+ 80从其他命令。
SELECT om.id, op.quantity, orp.quantity
FROM order_main om
JOIN order_part op ON om.id = op.order_main_id
LEFT JOIN order_reception `or` ON om.id = or.order_main_id
LEFT JOIN order_reception_part orp ON or.id = orp.order_reception_id
WHERE op.partid = 12345
AND op.status = 2
TL; DR只是'SUM(DISTINCT your_primary_key_here)'。 –
我无法看到+80来自哪里 – apokryfos
@apokryfos对不起,你应该是+40 – Bart