如何根据第三个表的状态从辅助表中获取字段的总和?

时间:2014-01-28 16:55:35

标签: mysql

如何根据第三个表的状态从辅助表中获取字段的总和?

这是为了获取等待从采购订单系统交货的料品总数。

我有一个产品表,根据我的采购订单项目表的qty_ordered减去qty_received,了解订购了多少产品。但是,这应仅适用于状态为2的采购订单中的采购订单项目(以排除不适用的采购订单,例如已取消的采购订单)。

如果po_item表中没有有效条目,则仍应返回一行,但on_order值为零,因此返回的行数应等于product表中的行数。

ERD

我能得到的最接近的是这个,但是如果产品没有匹配的po_item / purchase_order,那么就不会返回任何行,我每次都需要返回一行,即使它是零

SELECT product.id,
(COALESCE(SUM(po_item.qty_ordered),0) - COALESCE(SUM(po_item.qty_received),0) ) as on_order
FROM product
LEFT JOIN po_item ON po_item.product_id = product.id
INNER JOIN purchase_order on purchase_order.id = po_item.po_id and purchase_order.status = 2
GROUP BY product.id

1 个答案:

答案 0 :(得分:0)

这似乎可以完成这项工作,不确定它是否是最有效的方式

SELECT product.id,
(COALESCE(SUM(po_item.qty_ordered),0) - COALESCE(SUM(po_item.qty_received),0) ) as on_order
FROM product
LEFT JOIN po_item ON po_item.product_id = product.id AND po_item.item_id IN (
    SELECT po_item.item_id from po_item 
    INNER JOIN purchase_order on purchase_order.id = po_item.po_id and purchase_order.status = 1
    )

GROUP BY product.id