如何在遍历图的递归cte查询中记忆节点?

rryofs0p  于 2021-08-01  发布在  Java
关注(0)|答案(0)|浏览(287)

我的数据库包含以树状结构(父子关系)相关的对象,但对象可以有多个父对象(因此它实际上不是一棵树,而是一个图形)。
我想从给定的起始对象遍历图形,并列出起始对象中所有相关的对象。
我的table是这样的:
表格和图形
我的递归查询应该访问一个节点的所有父节点和所有子节点,并从那里重复。问题是我不知道如何记住我已经去过的节点,因此我进入了一个无休止的递归。
以下是我编写的查询(不记得访问的节点):

With cte_Relatives(ident, parentIdent) 
AS (
SELECT start.ident, start.parentIdent
FROM tblRelatives start
WHERE start.Ident = 'C'

UNION ALL

SELECT  
        child.ident, 
        child.parentIdent, 
FROM tblRelatives AS child
JOIN cte_Relatives parent ON parent.ident = child.parentIdent

UNION ALL

SELECT 
    parent.ident,
    parent.parentIdent,
FROM tblRelatives AS parent
JOIN cte_Relatives child ON parent.ident = child.parentIdent

)

SELECT * FROM cte_Relatives

我的问题是,cte不允许每个并集块有一个以上的cte\ U递归引用。因此,我无法查看我的新表是否已经包含我正在查看的id。这样地:

JOIN cte_Relatives child ON parent.ident = child.parentIdent AND parent.ident not in (Select ident from cte_Relatives)

如何存储访问的节点?
p、 s:对不起,如果已经有人问过这个问题,我没有找到解决办法。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题