Postgres左连接是截断行

时间:2014-01-21 15:07:43

标签: postgresql

我想要一个连接返回0而不是删除行。目前,如果我尝试加入这两个表并计算每个订阅的项目数,它将正常工作:

SELECT S.id, count(I.id) FROM "Subscription" S
LEFT JOIN "Item" I on I.id = S.item_id
WHERE S.status = 1
GROUP BY S.id

返回:

id | count(I.id) 
1       4
2       3
3       2

,而:

SELECT S.id, count(I.id) FROM "Subscription" S
LEFT JOIN "Item" I on I.id = S.item_id
WHERE S.status = 1
AND I.status IN (1,2,3)
GROUP BY S.id

返回:

id | count(I.id) 
1       3

我意识到这可能是Postgres的工作原理,但我过去常常使用MySQL。

我已尝试汇总功能以产生所需效果以及条件语句正确,完整和外部联接,但似乎无法看似让它以我想要的方式运作。

如果我想要返回状态为1的所有用户,但如果他们没有状态为1,2或3的项目,则显示0项,该怎么办?

this documentation来看,我使用的代码似乎应该有用。

期望的结果是:

id | count(I.id) 
1       3
2       0
3       0

1 个答案:

答案 0 :(得分:2)

尝试类似:

SELECT S.id, count(I.id) FROM "Subscription" S
LEFT JOIN "Item" I on I.id = S.item_id AND I.status IN (1,2,3)
WHERE S.status = 1
GROUP BY S.id

您的旧where条款正在过滤结果 LEFT JOIN将其转换为INNER JOIN