在分层数据中,如何选择直到根级别的所有节点?

时间:2017-03-13 17:08:36

标签: sql oracle hierarchical-data

如果我在这样的表中表示分层数据:

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,选择导致根级别的所有team_id的SQL是什么?我使用的是Oracle 11.2。

例如,给定team_id 5,返回的team_ids应为:(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个级别,但我正在寻找任意数量级别的解决方案。

1 个答案:

答案 0 :(得分:1)

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