mysql - MySQL 基于列连接两个表并排除另一列的值
问题描述
我有两张桌子。
- 项目表
- 项目关系表
项目表包含所有项目 ID 和名称
Id:1, name:project1
Id:2, name:project2
Id:3, name:project3
Id:4, name:project4
Id:5, name:project5
Id:6, name:project6
项目关系表包含所有项目之间的父子关系。
parent:1, child:2
parent:1, child:3
parent:4, child:5
这里的 parent 和 child 指的是项目 ID。我想要一个连接查询来获取唯一的父项目列表及其子项目计数。
像这样
Id:1, name:project1, count:2
Id:4, name:project4, count:1
Id:6, name:project6, count:0
解决方案
如果我理解正确,假设您没有嵌套超过一层的关系,这应该可以满足您的要求:
select coalesce(pr.parent, p.id), count(pr.child)
from project p left join
projectrelationship pr
on pr.child = p.id
group by coalesce(pr.parent, p.id);
这join
是关系中的孩子。这给出了两种情况:
- 如果有孩子,那么
pr.parent
就是父母ID。 - 如果没有子代,则
left join
没有匹配项,并且p.id
是父代 ID。
然后group by
由父级聚合并计算来自 的子级pr
。
推荐阅读
- mysql - MySQL Concat 查询替代方案
- search - 海关清单中的 SharePoint 搜索
- php - 路线 [song.store] 未定义
- python - 如何让下一组给定一步?
- openlayers-3 - 如何在js中动态添加ol.format.filter?
- python - Pandas read_csv dtype=object 列包含数字
- react-native - React Native Flatlist 删除项目 删除最后一个项目
- sql - 处理 Null 值或返回多个值的 Max 函数
- vb.net - 将项目从 ListView1 复制到 ListView2 时不起作用。(vb)
- javascript - 为什么在 b 打印之前打印 2 和 4?