sql - 如何在sql / oracle中选择节点的所有子节点和父节点
问题描述
我有一张如下表
我的表
| ID | PARENT_ID |
-----------------------------
| 20 | null |
| 40 | null |
| 50 | null |
| 70 | 122 |
| 100 | 40 |
| 102 | 4 |
| 126 | 100 |
| 9 | 50 |
| 122 | 40 |
| 123 | 9 |
我想为给定的三个孩子 126 ,70 和 123 选择包括所有孩子和父母的层次结构树,如下所示
预期产出
| ID | PARENT_ID |
-----------------------------
| 126 | 100 |
| 100 | 40 |
| 40 | null |
| 70 | 122 |
| 122 | 40 |
| 123 | 9 |
| 9 | 50 |
| 50 | null |
我试过了
select ID, PARENT_ID
from MyTable
start with ID=126 //this for example
connect by prior ID=Parent;
解决方案
您可以使用CONNECT BY PRIOR
子句通过分层查询来做到这一点:
select * from MyTable start with id in (126,70,123)
connect by prior parent_id = id;
注意:由于您有两个节点parent_id = 40
,因此您将获得两行 40 asID
和 null as parent_id
。如果只想保留一行,请使用distinct
子句:
select distinct * from MyTable start with id in (126,70,123)
connect by prior parent_id = id;
推荐阅读
- r - 每次修改源文件时,如何防止 R.cache 包的 memoizedCall() 更新缓存?
- c++ - 不能 push_back 进入向量 - 不给出过载错误
- identityserver4 - 从网络内部登录到 Identity Server
- c# - 在 ItemControl WPF C# 中异步加载用户控件
- performance - 深度学习 TensorFlow 模型能否在 Python 中进行训练、腌制并用于 C++ 中的预测?
- python - Pytorch 从 Dataloader 加载两个图像
- sql - 按商店(数量),列出客户访问商店的最大次数
- python - 获取循环Python之外的值列表
- xero-api - Xero 开发者帐户不显示组织
- sharepoint-2016 - SharePoint PnP - 将字段添加到默认视图