MS SQL 遞迴查詢 CTE Query
利用CTE實作Recursive查詢,先Select出頂點的資料作為第一筆,再UNION關連後的資料,需注意UNION中須JOIN回CTE中的關連條件。
WITH tblCTE AS
(
--TOP NODE
SELECT 1 AS DeptLevel, *
FROM DepartmentUnit
WHERE id = '{0}'
--TREE NODE, u1.superUnitGUID = tblCTE.GUID為部門間的關連條件
UNION ALL
SELECT (DeptLevel + 1) AS DeptLevel, u1.*
FROM DepartmentUnit u1 JOIN tblCTE ON u1.superUnitGUID = tblCTE.GUID
)
SELECT * FROM tblCTE ORDER BY DeptLevel ASC
應用項目
- 查詢某部門是否存在於階層結構中
- 查詢最近一筆有無存在某目的資料
- ...想到再補充...