Oracle 递归查询子节点和父节点
在Oracle中进行递归查询通常使用START WITH... CONNECT BY
子句。以下是一个示例,假设我们有一个名为nodes
的表,它有两个字段id
和parent_id
,其中parent_id
表示每个节点的父节点。
SELECT id, parent_id
FROM nodes
START WITH parent_id IS NULL -- 定义递归的起点(即没有父节点的节点)
CONNECT BY PRIOR id = parent_id; -- 定义递归的方向(每个节点都是上一个节点的父节点)
如果你想获取从根节点到叶子节点的路径,可以使用SYS_CONNECT_BY_PATH
函数:
SELECT id, parent_id, SYS_CONNECT_BY_PATH(id, '/') AS path
FROM nodes
START WITH parent_id IS NULL
CONNECT BY PRIOR id = parent_id;
如果你想获取所有子节点和对应的父节点,可以使用类似的方法,但是需要调整START WITH
条件来定位特定的父节点。例如,如果你想获取特定父节点parent_id = 10
的所有子节点,可以这样做:
SELECT id, parent_id
FROM nodes
START WITH parent_id = 10
CONNECT BY PRIOR id = parent_id;
这将返回id
为10的节点的所有直接和间接子节点。
评论已关闭