我希望计数表中由其他表的两个字段引用的行数。
我有以下结构
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我想要达到的结果
b_id, l_id, r_cnt
1, 1, 1
1, 2, 0
2, 1, 0
2, 2, 1我尝试过的语句,但在正确的联接中出现错误
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;我错过了什么?
发布于 2019-12-14 23:05:20
你们很亲密。查询的主要问题:
您正在混合隐式和显式联接:只是不要。先对显式联接进行评估,从而导致正在获取的错误(隐式联接表还没有identified)
left join;right join完全违背直觉,我建议一般避免使用)。
考虑:
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这是通过使用一个branches和levels (这基本上是两个表的笛卡尔乘积)生成所有可能的cross join和levels的组合来实现的,然后将repos表与left join一起使用。其余的是聚合和计算每个分支/级别组合匹配多少个repos记录。
https://stackoverflow.com/questions/59339890
复制相似问题