如何对特定 child 节点使用递归 CTE 内容?

How use recursive CTE content for specific child node?

我在 SQL 服务器中有一个递归 CTE 查询,它处理获取每个 parent 和 child 值的深度。但是我只想获得特定 child 的完整深度。例如,我拥有的数据看起来像这样,我只想获取 c_key 等于 child 的结果 我在 table 下方的初始查询获取所有链接的结果。

我试图在合并的 select 语句中添加一个 where 子句,但这只返回了第 0 深度行。

c_key p_key
child teen
teen adult
adult old
young middle
middle old
WITH cte_data (c_key, p_key, depth) AS
(
    SELECT c_key, p_key, 0 AS depth
    FROM my_table
    WHERE p_key = 'old'

    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.c_key = c.p_key
)
SELECT * 
FROM cte_data

貌似你应该把join条件换成columns,根据你的任务条件改变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