保留行,即使它们在其他连接表MySQL Query中没有任何行

时间:2013-01-22 22:27:42

标签: mysql sql

    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声明,以确保我们获取的订单是新的或交付。

1 个答案:

答案 0 :(得分:4)

简短回答是将WHERE更改为AND

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

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

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