1
    SELECT `products`.*, SUM(orders.total_count) AS revenue, SUM(orders.quantity) AS qty FROM `products` 
    LEFT JOIN `orders` ON (`products`.`id` = `orders`.`product_id`) 
    WHERE (`orders`.`status` = 'delivered' OR `orders`.`status` = 'new') 
    GROUP BY `products`.`ID` ORDER BY products.ID DESC LIMIT 10 OFFSET 0

这就是我得到的。目前它只抓取具有已交付或新订单的产品。

该 WHERE 语句仅用于正确计算 SUM(orders.total_count) 和 SUM(orders.quantity) -

我想抢所有的产品,如果有这个产品的订单,那么它应该查看 where 声明,以确保我们抢的订单是新的或已交付的。

4

1 回答 1

4

简短的回答是更改WHEREAND.

实际上,这意味着“ orders.status”列上的谓词需要在ON子句中,而不是WHERE子句中。

在您的查询中,该谓词相当于一个“ orders.status IS NOT NULL”,它将“抛出”由 LEFT JOIN 创建的任何 NULL 行。

考虑 LEFT (OUTER) JOIN 的最简单方法是,当没有其他匹配的“订单”行时,它会创建一个虚拟“订单”行以匹配“产品”行。该虚拟行由所有 NULL 值组成。

于 2013-01-22T22:29:50.673 回答