MSSQL 遞迴簡易範例

MSSQL

同一張資料表在不知道有多少階層成狀態下可以使用遞迴將資料塞選出來

遞迴範例

  原始資料

SELECT
    rs.id
    ,rs.name
    ,rs.parentId
FROM testRepairSort AS rs WITH (NOLOCK)
WHERE 1 = 1


 

  遞迴開始

--遞迴範例
    WITH newDb    --自定義新表名稱
    AS(
            SELECT rs.id ,rs.name ,rs.parentId
            FROM testRepairSort AS rs WITH (NOLOCK)
            WHERE (rs.id = 8)                            --查詢條件
            UNION ALL                                    --連接
            SELECT rs2.id ,rs2.name ,rs2.parentId
            FROM testRepairSort AS rs2 WITH (NOLOCK)     --完整資訊表
            INNER JOIN newDb AS newDb                    --遞迴關聯資料表
                ON rs2.id = newDb.parentId               --遞迴關聯欄位
    )
--顯示資訊
    SELECT DISTINCT newDb.id ,newDb.name ,newDb.parentId
    FROM newDb AS newDb WITH (NOLOCK)
    ORDER BY newDb.parentId DESC

結果

我只是一棵樹