gpt4 book ai didi

mysql - 另一个连接表上的 SQL 连接约束列

转载 作者:行者123 更新时间:2023-11-29 07:46:42 26 4
gpt4 key购买 nike

所以实际上我有 3 个表:

产品
编号

订单
id
状态

订单商品
id
order_id
产品ID
数量

所以我想按产品表作为主要查询。我想知道每件已经订购了多少,因此

SELECT products.*, SUM(order_items.quantity) AS sale_count 
FROM products
LEFT JOIN order_items ON products.id = order_items.product_id
GROUP BY products.id

一切正常,没有问题。但此查询将对每行的任何 order_items 进行计数,现在我只想在订单状态为 done 时进行计数。但问题是要获取 order_items 的状态,您需要引用 orders 对吗?

 SELECT products.*, SUM(order_items.quantity) AS sale_count 
FROM products
LEFT JOIN order_items ON products.id = order_items.product_id
LEFT JOIN orders ON order_items.order_id = orders.id AND orders.status = 'done'
GROUP BY products.id

但这不会对 order_items 产生约束,而是只有状态为 done 的订单才会显示在表中,否则为 NULL。

如何解决这个问题?感谢您的热心帮助。我真的很感激!!

最佳答案

我并不是 100% 清楚您在问什么,但我认为您是在问如何计算订单状态已完成的订单,而不丢弃订单状态未完成的结果。如果是这样,那么以下应该有效:

    SELECT products.*, 
SUM(CASE WHEN orders.status = 'done'
THEN order_items.quantity
ELSE 0 END) AS sale_count
FROM products
LEFT JOIN order_items
ON products.id = order_items.product_id
LEFT JOIN orders
ON order_items.order_id = orders.id
GROUP BY products.id

关于mysql - 另一个连接表上的 SQL 连接约束列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27569728/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com