递归 CTE 执行分解
递归 CTE 遵循逐步执行过程,最终产生所需的结果集。让我们逐行分解每个步骤,以便更好地理解。
WITH abcd AS (
这一行声明了名为“abcd”的递归 CTE。累积结果的临时表。
--锚点
第一个 select 语句充当锚点,选择满足锚点条件的行。在这种情况下,它从 @tbl 中获取具有 null ParentID 的行。这会导致“的初始填充。 abcd" CTE。
选择 id、名称、ParentID、CAST(名称 AS VARCHAR(1000)) AS Path
此行提取 ID、Name、ParentID 和最初仅包含行名称的计算列“Path”。
FROM @tbl
数据来自临时表@tbl.
WHERE ParentId IS NULL
此条件过滤 ParentID 为空的行,有效地选择顶级行。
UNION ALL
该运算符将锚点选择语句与递归成员。
--递归成员
第二个 select 语句形成递归成员,它基于锚点执行迭代。
SELECT t.id, t.Name, t.ParentID, CAST((a.path '/' t.Name) AS VARCHAR(1000)) AS "Path"
此行检索 ID、Name、ParentID 和修改后的列“Path”,该列将父级的“Path”与当前行的“Path”连接起来姓名。
来自 @tbl AS t
数据来自临时表@tbl,别名为“t”。
JOIN abcd AS a
这个连接使用 ParentID 将“t”中的行与现有“abcd”CTE 中的行链接起来
ON t.ParentId = a.id
连接条件确保子行与其父行匹配。
SELECT * FROM abcd
最后,该语句返回完整的结果集递归 CTE,包括所有迭代。
以上是递归 CTE 如何逐步工作?的详细内容。更多信息请关注PHP中文网其他相关文章!