我想从同一个表中获取最后的引用 ID。我有下表。
ID UserId DelegatedToUserId
1 100 101
2 101 102
3 102 103
4 103 NULL
5 104 109
我实在是想不起来。我知道我想要什么,只是无法将其显示在屏幕上。因此,当我询问 100 查询时应返回 103,当我再次询问 101 或 102 时,应返回 103。当用户输入 104 时,应返回 109
当我请求 103 时,它应该返回 103,因为没有委托(delegate)。
这可以在单个 SQL 查询中完成吗?
最佳答案
can this be done in single sql query ?
如果您不知道层次结构可以达到哪一级,则需要使用递归CTE
。如果只是 1 或 2 级,您可以在单个查询中无需递归 CTE
来完成。
您可以使用如下所示的递归CTE
来获得所需的输出。
;WITH mytest
AS (SELECT P.userid,
P.delegatedtouserid,
1 AS LVL
FROM @table P
WHERE userid = 100
UNION ALL
SELECT P1.userid,
P1.delegatedtouserid,
M.lvl + 1 AS LVL
FROM @table P1
INNER JOIN mytest M
ON M.delegatedtouserid = P1.userid)
SELECT TOP 1 WITH ties *
FROM mytest
ORDER BY Row_number() OVER (ORDER BY lvl DESC);
注意:将 @table
替换为您的实际表名称。
关于sql - 递归地从同一个表父子表中获取最后一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55353807/