如何忽略层次结构查询中特定类型的直接父级
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何忽略层次结构查询中特定类型的直接父级相关的知识,希望对你有一定的参考价值。
我有下面的表定义。由于我需要忽略“包装”类型的直接父级;表中也可以存在其他类型。
例如,当我将CHILD_NODE_ID = 3289374传递给查询时,直接的parent_id是3289375,但是它是'Folder'类型的,因此从层次结构查询本身中将其忽略,并且下一个父类ID 3289376(其类型为Package)也应从结果集按照我的要求。
我只对包类型感兴趣。我的查询也将仅获取包类型,但不会忽略“包”类型的直接父级。
分层查询应仅递归检查包类型,并应产生最终结果为“ 3289373”。
CHILD_NODE
******************
ID PARENT_NODE_ID CHILD_NODE_ID ISBN
2314861 3289375 3289374 9780838474648
2314862 3289376 3289375 folder_name
2314863 3289373 3289376 9780838473559
2314864 1271271 3289373 9780838441473
NODE
***********
ID Type
3289374 Package
3289375 Folder
3289376 Package
3289373 Package
SELECT *
FROM CHILD_NODE c, NODE n
WHERE
c.CHILD_NODE_ID=N.ID AND
N.TYPE='Package'
START WITH CHILD_NODE_ID=3289374
CONNECT BY PRIOR PARENT_NODE_ID = CHILD_NODE_ID
答案
您不能排除用于构建层次结构的'文件夹'类型。这样做将终止层次结构,因为将没有优先级ID。因此,一种方法是在CTE中构建层次结构,然后从CTE中进行选择来消除Folder。
with hier as
( select c.id, c.parent_node_id, c.child_node_id, n.type, level
from child_node c
join node n on c.child_node_id=n.id
start with c.child_node_id=3289374
connect by prior c.parent_node_id = c.child_node_id
)
select * from hier where type <> 'Folder';
以上是关于如何忽略层次结构查询中特定类型的直接父级的主要内容,如果未能解决你的问题,请参考以下文章