分析家族樹

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...