我正在尝试使用SQL Server中的CTE但是已经达到了一个死胡同,让下面的场景工作.我有一个类似于这个的层次结构表:
Node(ID:439) Node(ID:123) Node(ID:900) Node(ID:56) Node(ID:900)
预期成绩:
NodeID ParentNodeID 439 0 123 439 900 123 56 439 900 56
所以基本上我们有一个父子层次表,有一个细微的区别.每个孩子可能有一个以上的父母.我已经研究了许多关于创建返回父子记录的CTE的博客文章和StackOverflow帖子,但是他们并没有返回孩子的所有父母,只是它找到的第一个父母.
这是我尝试的CTE示例:
WITH Hierarchy(NodeID, ParentNodeID) AS ( SELECT T1.NodeID, T1.ParentNodeID FROM ParentChildTable T1 WHERE T1.NodeID = 439 UNION ALL SELECT T1.NodeID, T1.ParentNodeID FROM Heirarchy T1 INNER JOIN Heirarchy TH ON TH.NodeID = T1.ParentNodeID )
(注意:出于隐私目的,上述CTE中的表和列的名称已从原始名称更改.)
上面的CTE工作正常,它找到从ID:439开始的所有父子记录,但它只找到一个父项目ID:900,即使它有两个父项.
如果有可能使用CTE,有人可以告诉我,还是有其他SQL方法可以做到这一点?
干杯.雅.
一旦我纠正了CTE中的语法错误,这对我来说似乎没问题:
create table #ParentChildTable (nodeID int not null ,parentNodeID int not null ) insert #ParentChildTable select 900,56 union all select 900,123 union all select 123,439 union all select 56,439 union all select 439,0 ;WITH Heirarchy AS ( SELECT T1.NodeID, T1.ParentNodeID FROM #ParentChildTable T1 WHERE T1.NodeID = 439 UNION ALL SELECT T1.NodeID, T1.ParentNodeID FROM #ParentChildTable T1 INNER JOIN Heirarchy TH ON TH.NodeID = T1.ParentNodeID ) select * from Heirarchy
返回结果:
NodeID ParentNodeID ----------- ------------ 439 0 123 439 56 439 900 56 900 123