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声明,以确保我们获取的订单是新的或交付。
答案 0 :(得分:4)
简短回答是将WHERE
更改为AND
。
真的,这意味着,“orders.status
”列中的谓词需要在ON
子句中,而不是WHERE
子句。
在您的查询中,该谓词的作用相当于“orders.status IS NOT NULL
”,它将“抛弃”由LEFT JOIN创建的任何NULL行。
考虑LEFT(OUTER)JOIN的最简单方法是,当没有其他匹配的“订单”行时,它会创建一个虚拟“订单”行以匹配“产品”行。那个虚拟行包含所有NULL值。