连接 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%';
是的,您的查询看起来应该按预期工作。
有人可以验证我的查询是否产生了我希望的预期结果吗?
我正在使用 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%';
是的,您的查询看起来应该按预期工作。