我使用的是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时停止?
我对如何处理这个问题感到很失落。任何帮助将不胜感激。
答案 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