介绍
递归CTE是一种反复引用查询的方法,直到被认为是端点或终止检查(如所称)。值得注意的是,本文演示的示例将在Azure SQL数据库上完成。
使用递归CTE有一定的结构,如下所示:
图1:递归CTE结构
有一个初始查询被称为“锚点查询”,在上图中,该查询选择数字“1”作为“n”。有一个使用“UNION ALL”连接在一起的辅助查询。辅助查询,也称为“递归成员”(如上图所示)是连续运行的查询,直到递归成员到达终止点为止(也显示在上面的图像上)。
场景
例如:某公司总部人力资源部员工,需要向分公司经理询问员工的进展情况,以便了解现有员工的能力,能否胜任自己的岗位,从而了解该公司是否需要招收更多的员工,所以想要找出谁在管理员工。
解决方案
如上所述,示例是在Azure SQL数据库上完成的。所以,让我们来解决这个问题。这个演示被广泛用于展示递归CTE的用例。
图 2:数据集
以上是我们将要使用的数据集,以及我们将用于构建递归 CTE 的数据集。因此,在此示例中,我们可以看到有 2 条记录没有为"ReportsTo"列填充值,我们将假定它们是经理。
为了构建递归 CTE,我们将首先选择"ReportsTo"等于 NULL 的记录。
上图显示的将是递归CTE的锚定成员,如图1所示。这将是为递归成员设置基础的初始查询。在定位查询和递归之间,使用了“UNION ALL”联接,如下所示:
接下来是递归成员,它将连续运行,直到达到终止检查为止。现在让我们创建接下来的2个步骤,其中包括递归成员和终止检查(可以在查询的内部联接中看到)。
如您所见,上述代码已包装在"WITH StaffHierarchy AS"中,该代码调用递归 CTE,或者为此调用CTE。
最后,通过从CTE本身选择来完成代码,以展示递归CTE的结果。
领取专属 10元无门槛券
私享最新 技术干货