用左连接计数
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
子句中。
我写了这个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
子句中。