分层查询 - 获取特定路径上的所有父项

时间:2014-02-21 21:06:35

标签: oracle hierarchical

我使用的是Oracle 11g。

我有以下表结构:

Parent      Child
------------------
C01          165

C01          175

C01          C02

C01          C03

C02          C05

C03          C05

C05          10

现在我想找到所有的父母,让我们说数字10直到根。有两种可能的途径。

10->C05->C02->C01

10->C05->C03->C01

是否可以指定要上升的路径?例如,我只想要包含C02的路径。

是否也可以在某个特定点停下来?例如,向上走C02路径并在达到C02时停止?

我对如何处理这个问题感到很失落。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

现在我想找到所有的父母,让我们说数字10直到根。

SELECT path FROM (
  SELECT item, parent, sys_connect_by_path(item, '/') path
  FROM tree
  CONNECT BY PRIOR item = parent
  START WITH parent IS NULL
)
WHERE item = '10';

是否可以指定要上升的路径?例如,我只想要包含C02的路径。

SELECT path FROM (
  SELECT item, parent, sys_connect_by_path(item, '/') path
  FROM tree
  CONNECT BY PRIOR item = parent
  START WITH parent IS NULL
)
WHERE item = '10'
AND path LIKE '%/C02/%';

是否也可以在某个特定点停下来?例如,向上走C02路径并在达到C02时停止?

SELECT path FROM (
  SELECT item, parent, sys_connect_by_path(item, '/') path
  FROM tree
  CONNECT BY PRIOR item = parent
  START WITH item = 'C02'
)
WHERE item = '10';

- > SQLFiddle