我有3张桌子:
我需要找到一种方法来列出这些产品的总数量和待定数量(客户支付的产品,但尚未向他们发货,换句话说,产品数量按状态排序{ {1}},paid = 1
,shipped = 0
)。我想出了这个SQL命令:
cancelled = 0
期待结果如下:
但实际上我得到了这个:
这意味着mysql只显示pending_quantity>的结果。有没有办法达到我的预期?我不介意多个查询。
答案 0 :(得分:1)
您的查询存在许多问题。最大的问题,以及结果集中缺少某些skus的原因是,您最终加入orders
表是正确的。由于此表仅包含来自sku test
的订单,因此在加入期间将丢弃其他skus。
另一个问题是您从quantity_total
表中选择products
,但即使您正在进行分组,此列也不是聚合。我在下面做的解决方法是使用子查询来计算待处理数量,然后将其加入products
表。
SELECT p.sku,
COALESCE(t.quantity_pending, 0) AS quantity_pending,
p.quantity_total
FROM products p
LEFT JOIN
(
SELECT oi.sku, SUM(oi.quantity) AS quantity_pending
FROM order_items oi
LEFT JOIN orders o
ON oi.order_id = o.id
WHERE o.paid = 1 AND o.shipped = 0 AND o.cancelled = 0
GROUP BY oi.sku
) t
ON p.sku = t.sku
WHERE p.sku IN ('test', 'test-a', 'test-b');
<强>输出:强>
在这里演示: