sql - 用左连接计数
问题描述
我写了这个 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 in
为cp.name is null or cp.name in
以尝试适应左连接,但它没有用。如果左连接失败,似乎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
子句中。
推荐阅读
- c# - 使用 C# 将 Excel 转换为 CSV,在每一行上获得额外的
- python - 在下面的代码中立即执行方法后的 Tkinter
- transparent - mikrotik 上的 mitmproxy 透明代理不起作用
- javascript - vue.js 中用于电话号码的正则表达式
- android - 无法从 android 应用程序的 webview 检查元素
- java - Java 在另一个类对象上同步
- observable - 打印 Observable 对象
- php - 在 WHM 的 CPANEL EASY APACHE 4 中安装 PHP 5.2
- c++ - 如何在 pqxx7 中使用动态参数执行 sql
- python - 成功从源代码构建 Opencv,但无法在 anaconda 中导入 python