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

Sql 在分层数据中,如何选择根级别的所有节点?,sql,oracle,hierarchical-data,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 给定一个团队id,选择所有通向根级别的团队id的SQL是什么?我正在使用Oracle 11.2 例如,给定

如果我在如下表中表示分层数据:

team_id    team_name     parent_id
1          Sales         (null)
2          Executives    (null)
3          EMEA Sales    1
4          APAC Sales    1
5          UK Sales      3
给定一个团队id,选择所有通向根级别的团队id的SQL是什么?我正在使用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个级别,但我正在寻找任意级别数的解决方案。

请阅读CONNECT BY。请显示示例预期输出。@OldProgrammer确实我熟悉connectby。从根节点向下遍历树的分支是相当简单的,但是我想遍历树,只遍历Previor连接的一个分支。当然。Previor指的是父行,但“父”是一个任意的概念,取决于您如何可视化树。通过在parent_id字段上使用previor操作符,层次结构被“反转”,然后遍历“向上”变得很简单。谢谢
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