【问题标题】:In hierarchical data, how to select all nodes up to the root level?在分层数据中,如何选择直到根级别的所有节点?
【发布时间】:2017-03-13 17:08:36
【问题描述】:

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

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 个级别,但我正在寻找任意级别的解决方案。

【问题讨论】:

  • 阅读 CONNECT BY 。请显示示例预期输出。
  • @OldProgrammer 确实我很熟悉 CONNECT BY。从根节点遍历 down 树的分支是相当简单的,但我想遍历 up 树,只向上遍历一个分支
  • 先连接。

标签: sql oracle hierarchical-data


【解决方案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

【讨论】:

  • 当然。 PRIOR 指的是父行 - 但“父”是一个任意概念,取决于您如何可视化树。通过在 parent_id 字段上使用 PRIOR 运算符,层次结构被“反转”,然后“向上”遍历变得微不足道。谢谢
猜你喜欢
  • 2011-12-28
  • 2012-08-21
  • 2016-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-28
  • 1970-01-01
相关资源
最近更新 更多