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

簡単な答えは、に変更WHEREすることANDです。

実際、これが意味することは、" " 列の述語は、節ではなく節にorders.statusある必要があるということです。ONWHERE

クエリでは、その述語は「」と同等のことを行っています。orders.status IS NOT NULLこれは、LEFT JOIN によって作成された NULL 行をすべて「破棄」します。

LEFT (OUTER) JOIN について考える最も簡単な方法は、一致する「注文」行が他にない場合に、「製品」行に一致するダミーの「注文」行を作成することです。そして、そのダミー行はすべて NULL 値で構成されています。

于 2013-01-22T22:29:50.673 に答える