加入3张桌子内部&左

时间:2016-04-09 19:41:25

标签: sql postgresql join left-join inner-join

有人可以验证我的查询是否产生了我希望的预期结果吗?

我正在使用PostgreSQL。

 SELECT sold_at
, quantity
, returned_at
, name
, price
FROM sales
LEFT JOIN returns
ON sales.order_id=returns.order_id
JOIN  products
ON sales.product_id=products.product_id
WHERE name LIKE '%sock%'
ORDER by sold_at ASC
sold_at | quantity | returned_at | name | price

2015-06-01 | 8 | |socks-toeless | 15
2015-06-01 | 7 | 2015-06-08| socks-flat | 15

我的目标是输出包括从销售表中购买的所有袜子(无论是否返回),并且有一个列显示是否返回了填充了日期的袜子订单,如果它是返回,如果没有退回该项,则为空白。

产品名称(即'袜子')来自产品表。

2 个答案:

答案 0 :(得分:0)

您的问题没有描述表格的外观。我希望returns表包含产品,所以我期待一个看起来更像这样的查询:

SELECT s.*, p.name,
       (case when r.product_id is null then 0 else 1 end) as IsReturnFlag
FROM sales s JOIN
     products p
     ON s.product_id = p.product_id LEFT JOIN
     returns r
     ON s.order_id = r.order_id AND
        s.product_id = r.product_id
WHERE p.name LIKE '%sock%';

答案 1 :(得分:0)

是的,您的查询看起来应该按预期工作。