分析家谱

SQL Server 中的分层与递归查询

Jasmin Ludolf

Content Developer

家谱

familyTree 包含:

  • 人员的 ID
  • 人员的 Name
  • parentID 父级的 ID

用于描述层级的要素:

  • ID
  • parentID

家谱图片

SQL Server 中的分层与递归查询

整合应用

请记住递归 CTE 的原则:

  • 在锚成员中初始化递归
  • 在递归成员中实现递归函数
  • 定义终止条件

请记住以下工作要点:

  • 获取递归层级
  • 将递归结果合并为一个字段
SQL Server 中的分层与递归查询

家谱问题

获取世代数

  • 定义 LEVEL

    -- Anchor member
    0 as LEVEL
    -- Recursive member
    LEVEL + 1
    
  • 统计 LEVEL 数以得出世代 COUNT(LEVEL)

Generations:
100
SQL Server 中的分层与递归查询

家谱问题

将所有可能的父级放在同一字段

  • 将递归结果合并为一个字段
    -- Anchor member
    CAST(ID AS VARCHAR(MAX)) as Parent
    -- Recursive member
    Parent + ' -> ' + CAST(parentID AS VARCHAR(MAX))
    
+---------------------------------------------+
| Name            | Parent                    |
|-----------------|---------------------------|
|Dominik Egarter  | 100 -> 101 -> 102 ->103   |
+---------------------------------------------+
SQL Server 中的分层与递归查询

让我们查看家谱!

SQL Server 中的分层与递归查询

Preparing Video For Download...