首页 > 解决方案 > 用左连接计数

问题描述

我写了这个 SQL(有效):

with mark_derek as (
  select rachel_id
  from chad_patrick cp
  where cp.name in ('p_mark', 'p_derek')
)
select r.id as rachel_id,
       count(md.rachel_id) as total
from rachel r
     left join mark_derek md on md.rachel_id = r.id
group by r.id;

左连接很重要,因为total对于未连接的任何内容,返回的列都应该为 0。

我试图压缩它,使其不使用 CTE,通过将 更改cp.name incp.name is null or cp.name in以尝试适应左连接,但它没有用。如果左连接失败,似乎is null被忽略并且行被省略。

有没有办法解决这个问题,使其不需要子查询或 CTE?

标签: sqlpostgresqlpostgresql-10

解决方案


您可以像这样消除 CTE:

select r.id as rachel_id, count(cp.rachel_id) as total
from rachel r left join
     chad_patrick cp
     on cp.rachel_id = r.id and
        cp.name in ('p_mark', 'p_derek')
group by r.id;

过滤条件需要放在on子句中。


推荐阅读