1

MDW_CUSTOMER_ACCOUNTS次のフィールドがあります: ACCOUNT_ID, MEAL_ID.

MDW_MEALS_MENU次のフィールドがあります: MEAL_ID, MEAL_NAME.

クエリを使用して、特定の食事が顧客によって購読された回数に関するレポートを生成しようとしています。

SELECT count(a.account_id), b.meal_id, b.meal_name
    FROM mdw_meals_menu b LEFT JOIN mdw_customer_accounts a
    on b.meal_id=a.meal_id
    WHERE
    a.start_date BETWEEN to_date('01-APR-2013','DD-MON-YYYY')
    AND to_date('30-JUN-2013','DD-MON-YYYY')
    GROUP BY b.meal_id, b.meal_name
    ORDER BY count(a.account_id) desc, b.meal_id;

MEAL_IDこれは、少なくとも 1 回購読されているのみをリストします。ただし、購読されていないIDは表示されません。

MEAL_IDこれらの s を count で印刷するにはどうすればよい0ですか?

コードを変更しましたが、それでも同じ結果が得られます。

4

2 に答える 2

4

where句は、効果的に外部結合を内部結合に戻しています。外部結合テーブルの条件は、通常、次のように結合句に含める必要があります。

SELECT count(a.account_id), b.meal_id, b.meal_name
FROM mdw_meals_menu b 
LEFT JOIN mdw_customer_accounts a
       on b.meal_id=a.meal_id and
          a.start_date BETWEEN to_date('01-APR-2013','DD-MON-YYYY')
                           AND to_date('30-JUN-2013','DD-MON-YYYY')
GROUP BY b.meal_id, b.meal_name
ORDER BY count(a.account_id) desc, b.meal_id;
于 2013-06-11T08:09:54.293 に答える
1

左外部結合を使用する必要があります。

于 2013-06-11T08:07:31.793 に答える