Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在遍历图的递归cte查询中记忆节点?_Sql_Recursion_Ssms_Common Table Expression - Fatal编程技术网

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

Sql 如何在遍历图的递归cte查询中记忆节点?,sql,recursion,ssms,common-table-expression,Sql,Recursion,Ssms,Common Table Expression,我的数据库包含以树状结构(父子关系)相关的对象,但对象可以有多个父对象(因此它不是真正的树,而是图形) 我想从给定的起始对象遍历图形,并列出起始对象的所有相关对象 我的桌子是这样的: 我的递归查询应该访问节点的所有父节点和所有子节点,并从那里重复。问题是我不知道如何记住我已经去过的节点,因此我进入了一个无休止的递归 以下是我编写的查询(不记得访问过的节点): 我的问题是,cte不允许每个联合块对cte_递归进行多个递归引用。因此,我无法查看我的新表是否已经包含我正在查看的ID。像这样: JOI

我的数据库包含以树状结构(父子关系)相关的对象,但对象可以有多个父对象(因此它不是真正的树,而是图形)

我想从给定的起始对象遍历图形,并列出起始对象的所有相关对象

我的桌子是这样的:

我的递归查询应该访问节点的所有父节点和所有子节点,并从那里重复。问题是我不知道如何记住我已经去过的节点,因此我进入了一个无休止的递归

以下是我编写的查询(不记得访问过的节点):

我的问题是,cte不允许每个联合块对cte_递归进行多个递归引用。因此,我无法查看我的新表是否已经包含我正在查看的ID。像这样:

JOIN cte_Relatives child ON parent.ident = child.parentIdent AND parent.ident not in (Select ident from cte_Relatives) 
如何存储访问的节点


p.s:对不起,如果已经问过了,我没有找到解决方案。

你能发布一个可能输入和所需输出的示例吗?你能发布一个可能输入和所需输出的示例吗?
JOIN cte_Relatives child ON parent.ident = child.parentIdent AND parent.ident not in (Select ident from cte_Relatives)