如何对特定 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
我在 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