递归自联接SSMS,但定义了最低节点

米尔斯

祝一切顺利,下面的代码定义了一个简单的递归自连接。但是,使用这种方法,我只能定义最多的parentNode。就我而言,我希望能够识别出最多的子节点并能够看到他的所有父母。

WITH q AS 
(
    SELECT * FROM [QA].[Node]
    WHERE ParentNodeID IS NULL -- This is where we define the most parent ID
    UNION ALL
    SELECT  m.* FROM [QA].[Node] m
        INNER JOIN q ON m.ParentNodeID = q.ID
    )
SELECT * FROM q

有人可以帮我吗:)会不胜感激。我想要定义的功能说,给查询一个ID为7,并让查询按顺序从最上层的父节点开始,最后给出我们给出的节点返回。

例如,如果表是祖先,并且我们有一列引用其自我标识人爸爸。

如果我告诉查询“ WHERE ID = 50”,我希望结果返回

ID, ParentId, Name
(1, NULL, Grandpa),
(99, 1, Dad),
(50, 99, Me)
Shnugo

这是一个简单的例子

DECLARE @mockup TABLE(ID INT, ParentId INT, Name VARCHAR(100));
INSERT INTO @mockup VALUES
(1, NULL, 'Grandpa'),
(99, 1, 'Dad'),
(50, 99, 'Me');

DECLARE @StartForBottomUp INT=50;

WITH recCTE AS
(
    SELECT * FROM @mockup WHERE [email protected]
    UNION ALL
    SELECT m.*
    FROM @mockup AS m
    INNER JOIN recCTE AS r ON m.ID=r.ParentId
)
SELECT * FROM recCTE ;

我从给定ID的项目开始锚定部分,然后向上移动链条。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章