在下面的例子中
id parent_id
A A
B A
C B
select id, parent_id
from table
start with id = 'A'
connect by nocycle parent_id = prior id
I get
A A
B A
C B
在我的数据库中,表中有数百万行以及深而宽的层次结构,我并不对所有孩子感兴趣。我可以派生出我感兴趣的子项。因此,我想彻底改变查询并提供 START WITH 子项 id。然后我想递归地输出父级,直到到达顶部。在我的例子中,顶部是 id 和parent_id 相等的地方。这就是我正在尝试的,但我无法让它显示顶级父级。
select id, parent_id
from table
START WITH id = 'C'
CONNECT BY nocycle id = PRIOR parent_id
这给了我
C B
B A
它没有输出 A A。可以这样做吗?我希望做的不是在输出中将parent_id 显示为单独的列,而只是显示与id 相关的名称。然后,顺序就隐含了层次结构。
我通过使用得到了这个结果WITH
条款。
WITH REC_TABLE ( ID, PARENT_ID)
AS
(
--Start WITH
SELECT ID, PARENT_ID
FROM table
WHERE ID='C'
UNION ALL
--Recursive Block
SELECT T.ID, T.PARENT_ID
FROM table T
JOIN REC_TABLE R
ON R.PARENT_ID=T.ID
AND R.PARENT_ID!=R.ID --NoCycle rule
)
SELECT *
FROM REC_TABLE;
它似乎也是这样工作的。
select id, parent_id
from T
START WITH id = 'C'
CONNECT BY id = PRIOR parent_id and parent_id!= prior id;
-- ^^^^^^^^^^^^^^^^^^^^
-- break cycles
希望能帮助到你。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)