如何找到相同 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
。我包括 AnchorChildID
和 AnchorParentID
以便更容易理解结果和发生的事情。
运行 此查询没有最终过滤器 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
我有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
。我包括 AnchorChildID
和 AnchorParentID
以便更容易理解结果和发生的事情。
运行 此查询没有最终过滤器 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