首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从多个表中选择SQL并计数第三个表

从多个表中选择SQL并计数第三个表
EN

Stack Overflow用户
提问于 2019-12-14 23:00:17
回答 1查看 50关注 0票数 1

我希望计数表中由其他表的两个字段引用的行数。

我有以下结构

代码语言:javascript
复制
branches table
id, name
1, dev
2, master

levels table
id, name
1, easy
2, hard

repos table
id, name, branch_id, level_id
1, repo-1, 1, 1
2, repo-2, 2, 2

我想要达到的结果

代码语言:javascript
复制
b_id, l_id, r_cnt
1, 1, 1
1, 2, 0
2, 1, 0
2, 2, 1

我尝试过的语句,但在正确的联接中出现错误

代码语言:javascript
复制
SELECT
    b.id,
    l.id,
    COUNT(r)
FROM
    branches b,
    levels l
    RIGHT OUTER JOIN repos r ON r.branch_id = b.id
    AND r.level_id = l.id;

我错过了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-14 23:05:20

你们很亲密。查询的主要问题:

您正在混合隐式和显式联接:只是不要。先对显式联接进行评估,从而导致正在获取的错误(隐式联接表还没有identified)

  • you,而不是left joinright join完全违背直觉,我建议一般避免使用

)。

考虑:

代码语言:javascript
复制
select b.id b_id, l.id l_id, count(r.id)
from branches b
cross join levels l
left join repos r on r.branch_id = b.id and r.level_id = l.id
group by b.id, l.id

这是通过使用一个brancheslevels (这基本上是两个表的笛卡尔乘积)生成所有可能的cross joinlevels的组合来实现的,然后将repos表与left join一起使用。其余的是聚合和计算每个分支/级别组合匹配多少个repos记录。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59339890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档