1

我正在尝试列出我的产品表,但带有指向我的交货订单的链接,以便为我提供某些状态下的库存总和;分配、派送等

有一个“状态”字段来定义当前交货的位置,例如;1 = 已分配,2 = 已发送,3 = 已交付等

这是我目前为止

SELECT product.*, sum(quantity) AS allocated FROM product 
    LEFT JOIN delivery_product ON ( product.id = product_id ) 
    LEFT JOIN delivery ON ( delivery_id = delivery.id AND delivery.status = 1 ) 
GROUP BY code           
ORDER BY code

它包括来自delivery_product的所有数量匹配,而我只想包括那些交货订单状态= 1的。我认为这是因为我在状态限制开始之前首先加入delivery_product表,但我还能怎么做呢?

如果你能看到一个更好的方法来完成我的任务,那就加分:)

-

product
id  code   stock
1   ABC    1000
2   DEF    2000

delivery
id  status   date   etc
1   1        etc    etc

delivery-product
id  delivery_id   product_id   quantity
1   1             1            500


results
product.id product.code product.stock allocated
1          ABC          1000          500
2          DEF          2000          0
4

1 回答 1

1

我认为对您的查询进行小修改应该可以:

SELECT product.*
,   sum(case when delivery.status = 1 then quantity else 0 end) AS allocated
FROM product 
    LEFT JOIN delivery_product ON ( product.id = product_id ) 
    LEFT JOIN delivery ON ( delivery_id = delivery.id AND delivery.status = 1 ) 
GROUP BY code           
ORDER BY code

您可以通过将联接从左外部转换为内部来避免条件,但如果产品缺少状态为 的交货记录,delivery则查询不会返回为零的行。quantity1

于 2012-05-02T14:12:50.180 回答