在分层数据中,如何 select 所有节点到根级别?
In hierarchical data, how to select all nodes up to the root level?
如果我有这样的 table 表示的分层数据:
team_id team_name parent_id
1 Sales (null)
2 Executives (null)
3 EMEA Sales 1
4 APAC Sales 1
5 UK Sales 3
给定一个 team_id,SQL 到 select 通向根级别的所有 team_id 是什么?我正在使用 Oracle 11.2。
例如,给定 team_id 5,返回的 team_id 应该是:(5,3,1)
或者,给定 team_id 4,则输出应为:(4,1)
向下遍历树枝显示数据层次结构相当简单,使用类似的东西:
SELECT team_id, team_name, parent_id
FROM teams
START WITH team_name = 'Sales'
CONNECT BY PRIOR team_id = parent_id
;
我正在寻找相反的方法 - 从特定节点向上遍历树枝。
请注意,此处的示例数据只有 3 个级别,但我正在寻找任意数量级别的解决方案。
WITH test AS
( SELECT 1 team_id, 'Sales team_name', NULL parent_id FROM dual
UNION
SELECT 2, 'Executives' , NULL FROM dual
UNION
SELECT 3, 'EMEA Sales', 1 FROM dual
UNION
SELECT 4, 'APAC Sales', 1 FROM dual
UNION
SELECT 5, 'UK Sales' , 3 FROM dual
)
SELECT team_id
FROM test
START WITH team_id = 5
CONNECT BY prior parent_id = team_id
如果我有这样的 table 表示的分层数据:
team_id team_name parent_id
1 Sales (null)
2 Executives (null)
3 EMEA Sales 1
4 APAC Sales 1
5 UK Sales 3
给定一个 team_id,SQL 到 select 通向根级别的所有 team_id 是什么?我正在使用 Oracle 11.2。
例如,给定 team_id 5,返回的 team_id 应该是:(5,3,1)
或者,给定 team_id 4,则输出应为:(4,1)
向下遍历树枝显示数据层次结构相当简单,使用类似的东西:
SELECT team_id, team_name, parent_id
FROM teams
START WITH team_name = 'Sales'
CONNECT BY PRIOR team_id = parent_id
;
我正在寻找相反的方法 - 从特定节点向上遍历树枝。
请注意,此处的示例数据只有 3 个级别,但我正在寻找任意数量级别的解决方案。
WITH test AS
( SELECT 1 team_id, 'Sales team_name', NULL parent_id FROM dual
UNION
SELECT 2, 'Executives' , NULL FROM dual
UNION
SELECT 3, 'EMEA Sales', 1 FROM dual
UNION
SELECT 4, 'APAC Sales', 1 FROM dual
UNION
SELECT 5, 'UK Sales' , 3 FROM dual
)
SELECT team_id
FROM test
START WITH team_id = 5
CONNECT BY prior parent_id = team_id