T-SQL使用公共表表达式获取所有节点及其最后一级子节点
我需要最后一级和父级之间所有节点的最后一级子级。我不熟悉递归CTE,并试图得到这个结果 考虑下表:T-SQL使用公共表表达式获取所有节点及其最后一级子节点,sql,sql-server,tsql,common-table-expression,Sql,Sql Server,Tsql,Common Table Expression,我需要最后一级和父级之间所有节点的最后一级子级。我不熟悉递归CTE,并试图得到这个结果 考虑下表: emp id | mgr id 1 null 2 1 3 1 4 1 5 2 6 2 7 3 8 3 9 4 10 4 11 5 12 6 13 6 14
emp id | mgr id
1 null
2 1
3 1
4 1
5 2
6 2
7 3
8 3
9 4
10 4
11 5
12 6
13 6
14 6
15 11
如果输入为(15)
,则输出应为
mgr id emp id
2 12
2 13
2 14
2 15
5 15
6 12
6 13
6 14
11 15
在网上搜索我想这可以通过递归查询来完成,但我无法做到
with cte as
(
select
emp_id, mgr_id
from
emp_heirarchy
where
emp_id in (select MIN(lt.emp_id)
from landing_table lt
inner join emp_heirarchy eh on lt.emp_id = eh.emp_id
group by mgr_id)
union all
select
eh.emp_id, eh.mgr_id
from
emp_heirarchy eh
inner join
cte c on c.mgr_id = eh.emp_id
)
select distinct *
from cte
order by mgr_id
我尝试了上述查询的其他几个版本,但没有成功。您的递归查询工作正常,我不理解预期结果。
11 16
这16来自哪里?我不理解您想要的结果集。如果您正在向管理者遍历层次结构,为什么要在2处停止?也就是说,为什么不升到emp_id=1?我第二个问题是“11,16”这一行是从哪里来的?很抱歉搞混了。我已经编辑了我的问题并删除了EMPID16。我不想进入根目录。我只需要在节点之间,即根和最后一个子节点之间。我希望每个这样的节点都与最后一个子节点一起显示。因此,我们需要结果中的节点2,它位于根和最后一个子节点之间。节点2的最后一个子节点是15(来自子节点2和5)和12,13,14(来自子节点6)。类似地,我希望在结果中表示11、5和6。我不想从其他节点得到任何东西,因为它们与输入15无关,根节点除外。我不知道现在是否清楚。这一个有点难以解释。您的递归查询工作正常,我不理解预期结果。11 16
这16来自哪里?我不理解您想要的结果集。如果您正在向管理者遍历层次结构,为什么要在2处停止?也就是说,为什么不升到emp_id=1?我第二个问题是“11,16”这一行是从哪里来的?很抱歉搞混了。我已经编辑了我的问题并删除了EMPID16。我不想进入根目录。我只需要在节点之间,即根和最后一个子节点之间。我希望每个这样的节点都与最后一个子节点一起显示。因此,我们需要结果中的节点2,它位于根和最后一个子节点之间。节点2的最后一个子节点是15(来自子节点2和5)和12,13,14(来自子节点6)。类似地,我希望在结果中表示11、5和6。我不想从其他节点得到任何东西,因为它们与输入15无关,根节点除外。我不知道现在是否清楚。这个有点难以解释。