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結合を左外部から内部に変換することで条件を回避できますが、製品quantityのステータスが の配送レコード1が欠落している場合、クエリはゼロの行を返しません。

于 2012-05-02T14:12:50.180 に答える