如何找到相同 table 的 parent 行

How to find parent row for same table

我有table这样的东西:

childId | parentId
   1    |  null
   2    |   1
   3    |  null
   4    |   2

列 childId 是此 table 的主键,parentId 是此 table 的外键并引用列 (childId).

而且我需要调用一个函数并发送参数 (childId),函数将找到此 child 的最多 parent 行。

示例: 如果我通过childId = 4,输出结果需要是1.

这个问题有解决办法吗?

编辑:

我需要类似于层次结构顶级行的内容。 我已经尝试使用递归 CTE,但无法完成。

看起来递归 CTE(常用 table 表达式)很适合这种类型的查询。

示例数据

DECLARE @T TABLE (childId int, parentId int);

INSERT INTO @T VALUES
(   1    ,   null),
(   2    ,    1  ),
(   3    ,   null),
(   4    ,    2  );

查询

用参数替换常量4。我包括 AnchorChildIDAnchorParentID 以便更容易理解结果和发生的事情。 运行 此查询没有最终过滤器 WHERE ParentID IS NULL 以查看其工作原理。

WITH
CTE
AS
(
    SELECT
        childId AS AnchorChildID
        ,parentId AS AnchorParentID
        ,childId AS ChildID
        ,parentId AS ParentID
    FROM @T AS T
    WHERE childId = 4

    UNION ALL

    SELECT
        CTE.AnchorChildID
        ,CTE.AnchorParentID
        ,T.ChildID
        ,T.ParentID
    FROM
        CTE
        INNER JOIN @T AS T ON T.ChildID = CTE.ParentID
)
SELECT ChildID
FROM CTE
WHERE ParentID IS NULL
OPTION(MAXRECURSION 0)
;

结果

ChildID
1