左外连接不适用于postgres

时间:2015-05-29 02:42:31

标签: postgresql join

我有一个我正在尝试加入的销售表,产品表和类别表。我希望products表中的所有行都与categories表中的行匹配。然后我想加入sales表,但我只想要sales表中与products表匹配的行。这就是我的sql的样子:

create table productsandcat as 
select p.p_id, p.p_name, p.p_price, c.c_name, s.s_price, s.quantity 
from products p
join categories c on p.cid = c.c_id
left outer join sales s on s.pid = p.p_id

但它没有按预期工作。这将返回sales表中的所有行,但我只想要与products和categories表匹配的行。

例如:

Products table:

p_id    p_name   p_price   cid
1        a          1       0
2        b          1        1
3        c           1       2

Categories table:
c_id   c_name
0         a1
1          a2
2          a3

sales table:
pid   quantity
1       1
4        1
5         2

productsandcat table:
p_id   p_name   p_price   c_name   s_price   quantity
1        a        1         a1        1      1
2        b        1         a2       0       0
3        c         1        a3       0       0  

1 个答案:

答案 0 :(得分:0)

你需要在你的左外连接上有一个AND,它具有类别表的条件。

select p.p_id, p.p_name, p.p_price, c.c_name, s.s_price, s.quantity 
from products p
join categories c on p.cid = c.c_id
left outer join sales s on s.pid = p.p_id and s.cid = c.c_id

如果您没有销售类别

,请不要使用左外连接

select p.p_id, p.p_name, p.p_price, c.c_name, s.s_price, s.quantity 
from products p
join categories c on p.cid = c.c_id
join sales s on s.pid = p.p_id