我想要一个连接返回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
答案 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
。