我在SQL Server中有一个递归CTE查询,它处理获取每个父级和子级值的深度。然而,我只想获得一个特定子节点的全部深度。例如,我拥有的数据看起来像这样,我只想获得c_key
等于child
的结果,我在表下的初始查询获得所有链接的结果。
我试图在联合选择语句中添加where子句,但这只是返回第0个深度行。
<表类>
c_key
p_key
tbody><<tr>子 青少年 青少年 成人 成人老 年轻中间 中间老 表类>
看起来,您应该为连接条件交换列,并根据您的任务条件更改where搜索条件。
WITH cte_data (c_key, p_key, depth) AS
(
SELECT c_key, p_key, 0 AS depth
FROM my_table
WHERE c_key = 'child'
UNION ALL
SELECT c.c_key, c.p_key, o.depth + 1 AS depth
FROM cte_data o
INNER JOIN my_table c ON o.p_key = c.c_key
)
SELECT *
FROM cte_data
ORDER by depth