连接 3 表内部和左侧

Joining 3 Tables Inner & Left

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

我正在使用 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

我的目标是让输出包含销售 table 中的所有袜子采购(无论是否退回),并有一列显示袜子订单是否已退回并填充如果已退回,则带有日期;如果未退回,则为空白。

产品名称(即'sock')来自产品table。

你的问题没有描述 table 的样子。我希望 returns table 包含产品,所以我希望查询看起来更像这样:

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%';

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