用左连接计数

Counting with a left join

我写了这个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。

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

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

您可以这样消除 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子句中。