通过了解CTE的逻辑有所帮助

时间:2017-02-07 20:13:41

标签: sql

最近我偶然发现了一个公用表表达式,一个递归查询来显示分层数据(参见下面的查询和(部分)结果)。 我理解查询是如何构建的,一般是它的作用,但是我没有得到通过使用内部联接来获得每行的正确级别所涉及的逻辑。 有人可以为此澄清一下吗? 所以我的问题是如何'计算'第3行是第1级的查询,第7行是第2级,第8行是第3级,等等。 提前致谢。罗。 enter image description here

1 个答案:

答案 0 :(得分:1)

OrgReport是此命名查询的名称。它在此CTE中定义,并且(作为递归CTE的特性),请注意,它也用于第二个“递归CTE”中。查询的一部分。

在第一个"锚"部分0被选入Level列(第一行定义的列名)。

在第二个"递归"部分,Level列的值计算为Level + 1。由于Employee表不包含此类列,因此Level表达式中的Level + 1引用Level命名查询中的OrgReport列,因此Level层次结构中下一级别的行的值是先前层次结构级别上的行的级别,增加1。

JOIN背后的逻辑大致是"加入你到目前为止的经理所处结果的员工的结果,然后将这些员工添加到结果中(增加{ {1}}价值)"。只要添加新行,就重复。

重要的信息可能是,而#34;锚定" part只在开始时执行一次,"递归"部分被重复执行(因此可能由连接条件选择新的Level表行) - 只要添加新行,即只要查询返回任何行,第二部分就会重复。