在下面的例子中
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
我懂了
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
它没有输出AA。可以这样做吗?我希望不会在输出中将parent_id显示为单独的列,而只是显示与该ID相关的名称。然后,该顺序隐含了层次结构。
我通过使用WITH子句得到了那个结果。
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
希望能帮助到你。