T-SQL:在记录列表中显示或不显示值

时间:2012-05-14 19:54:17

标签: tsql

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

客户

id  
firstName

订单

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'

1 个答案:

答案 0 :(得分:0)

一切都很好,但你需要在连接的ON子句中过滤外连接,否则你将外连接变成内连接。我已将Name列添加到Items,但它应该是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'