首页 > 解决方案 > 递归加入最近的祖先/父母以在同一个表中记录?

问题描述

根据这个问题的标题,我试图在具有特定属性(以最接近的父记录)的同一个表中递归地与另一条记录连接记录,但我不完全确定如何处理这个。

在这里这里进行了检查,但遗憾的是对于我所需的用例来说不够具体。

示例 SQLFiddle:

http://sqlfiddle.com/#!18/0c5fb/2

我试图实现的最终结果是这样的,其中每一行都知道其最接近的祖先,其中 NeededElement 为真:

元素ID 元素名称 需要元素 父元素 ID ClosestNeededElementID
1 根元素 真的 (无效的) (无效的)
2 子元素 A 真的 1 1
3 子元素 B 错误的 1 1
4 子元素 AA 错误的 2 2
5 子元素 AB 错误的 2 2
6 子元素 BA 错误的 3 1
7 子元素 BB 错误的 3 1

提前谢谢了!

标签: sqlsql-servertsqlcommon-table-expression

解决方案


您可以使用条件为最近的父级保留一个运行列:

with cte(id, name, n_elem, p, l) as (
   select *, null from testelements where parentelementid is null
   union all
   select t.*, case when c.n_elem = 1 then c.id else c.l end
   from cte c join testelements t on t.parentelementid = c.id
)
select * from cte;

推荐阅读