-1

我有一张客户、订单和物品的表格。我想写一份报告,每行有一个客户(在这个例子中,我假设每个客户一个订单)以及是否订购了某些物品。

客户

ID  
名

订单

ID
客户 ID

项目

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 子句中过滤外连接,否则您会将外连接变成内连接。我已经Name在 Items 中添加了列,但它可能应该是ProductIDProduct 表的外键,带有 ProductName。

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 回答