我正在尝试列出我的产品表,但链接到我的交货单,以便给出我某些状态的库存总和;分配,派遣等
有一个'status'字段来定义当前交付的位置; 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
答案 0 :(得分: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
联接转换为内部从左外部来避免条件,但如果状态为quantity
的传递记录,查询将不会返回1
为零的行该产品缺少。