使用 SQL (Teradata) 为树创建物化路径

Creating a Materialized Path for a tree with SQL (Teradata)


我在 table 中给出了一个组织树,它被排序为 "top-down"(从 parent 到 child)。每个实例的级别也作为属性给出。
数据结构示例:
Index Employee_name Employee_level
1 Michael 1
2 Pam 2
3 Jim 2
4 Dwight 3
5 Angela 1

在上面的树中,Michael 是 Pam 和 Jim 的 parent,而 Jim 是 Dwight 的 parent。 Angela 与没有 children 的 Michael 平行。
我希望创建一个列,允许查询选定分支中的所有员工。
经过一些研究,我认为物化路径可以工作。因此,我可能需要创建一个包含每个员工的 parent 的列,然后使用递归创建另一个包含所需键的列。
关于如何使用 Teradata 创建此列的任何想法 SQL?
谢谢

这会让你得到 parent:

select t.*,
 (
   select max(index) 
   from tab as t2 
   where t2.index < t.index 
     and t2.Employee_level < t.Employee_level
 ) as parent_idx
from tab as t

当你在 table 中实现它时,你可以做简单的递归:

WITH RECURSIVE cte AS
 ( -- traverse the hierarchy and built the path
   SELECT idx, parent_idx, Employee_level, Employee_name
     ,Cast(Employee_name AS VARCHAR(500)) AS Path -- must be large enough for concatenating all levels
   FROM mytab
   WHERE Employee_level = 1

   UNION ALL

   SELECT t.idx, t.parent_idx, t.Employee_level, t.Employee_name 
     ,cte.Path || ',' || Trim(t.Employee_name)   
   FROM cte JOIN mytab AS t
   ON cte.idx = t.parent_idx
)
select * from cte 
order by idx
;