-1

顧客、注文、アイテムの表があります。行ごとに1人の顧客(この例では、顧客ごとに1つの注文を想定しています)と特定のアイテムが注文されたかどうかを示すレポートを作成したいと思います。

顧客

id  
ファーストネーム

注文

id
Customers_id

アイテム

id
orders_id

特定のアイテム(リンゴなど)が注文されていない場合、行の表示に問題があります

私が欲しいのは、3列のレポートです。

  • ファーストネーム
  • りんご
  • バナナ

これが私が使用しているクエリです:

SELECT c.firstName, i_apple, i_banana
FROM customers
LEFT JOIN orders o ON c.id = o.customers_id
LEFT JOIN items i_apple ON o.id = i_apple.orders_id
LEFT JOIN items i_banana ON o.id = i_banana.orders_id
WHERE i_apple = 'apple' AND i_banana = 'banana'
4

1 に答える 1

0

すべて問題ありませんが、結合のON句で外部結合をフィルタリングする必要があります。そうしないと、外部結合が内部結合に変わります。Itemsに列を追加しましNameたが、おそらくProductID、ProductNameを持つProductテーブルへの外部キーである必要があります。

SELECT c.firstName, i_apple.Name Apple, i_banana.Name Banana
FROM customers
LEFT JOIN orders o 
  ON c.id = o.customers_id
LEFT JOIN items i_apple 
  ON o.id = i_apple.orders_id
 AND i_apple.Name = 'apple'
LEFT JOIN items i_banana 
  ON o.id = i_banana.orders_id
 AND i_banana.Name = 'banana'
于 2012-05-14T22:38:12.043 に答える