我在检索订单数量减去收到的数量时遇到了问题。
表的基本版本看起来像
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 =已收到
我希望我已经解释得很清楚,否则请向我询问其他信息。
以下查询将显示我的意思,我需要每个订单SUM()
orp.quantity
,但每次接收的结果都会显示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
答案 0 :(得分:0)
简单的解决方案是:
SELECT (
SELECT SUM(quantity)
FROM order_part
WHERE order_part.partid=12345 -
SELECT SUM(quantity)
FROM order_reception_part
WHERE order_reception_part.partid=12345
);
答案 1 :(得分:0)
我自己找到了答案。使用连接获取正确的orp.quantity
并使用子查询获取整个op.quantity
,然后减去它们。
SELECT (
SELECT SUM(quantity)
FROM order_part
WHERE partid = p.partid
AND `status` = 2
) - IFNULL(SUM(orp.quantity), 0)
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
AND orp.partid = op.partid
WHERE op.partid = p.partid
AND op.status = 2