樹形結構的儲存與查詢
資料庫設計中常常會遇到需要儲存樹形結構,比如員工關係表、組織結構表,等等。
點選(此處)摺疊或開啟
-
--測試資料
-
-
CREATE TABLE #Employees(
-
EmployeeCode varchar(20) NOT NULL PRIMARY KEY CLUSTERED,
-
ReportToCode varchar(20) NULL)
-
GO
-
INSERT INTO #Employees VALUES(\'A\',NULL)
-
INSERT INTO #Employees VALUES(\'B\',\'A\')
-
INSERT INTO #Employees VALUES(\'C\',\'A\')
-
INSERT INTO #Employees VALUES(\'D\',\'A\')
-
INSERT INTO #Employees VALUES(\'E\',\'B\')
-
INSERT INTO #Employees VALUES(\'F\',\'B\')
-
INSERT INTO #Employees VALUES(\'G\',\'C\')
-
INSERT INTO #Employees VALUES(\'H\',\'D\')
-
INSERT INTO #Employees VALUES(\'I\',\'D\')
-
INSERT INTO #Employees VALUES(\'J\',\'D\')
-
INSERT INTO #Employees VALUES(\'K\',\'J\')
-
INSERT INTO #Employees VALUES(\'L\',\'J\')
-
INSERT INTO #Employees VALUES(\'M\',\'J\')
-
INSERT INTO #Employees VALUES(\'N\',\'K\')
-
GO
-
/*
-
可能遇到的查詢問題:
-
1. 員工\'D\'的所有直接下屬
-
2. 員工\'D\'的所有2級以內的下屬(包括直接下屬和直接下屬的下屬)
-
3. 員工\'N\'的所有上級(按報告線順序列出)
-
4. 員工@EmployeeCode的所有@LevelDown級以內的下屬(@EmployeeCode和@LevelDown以變數傳入)
-
DECLARE @EmployeeCode varchar(20), @LevelDown int;
-
SET @EmployeeCode = \'D\';
-
SET @LevelDown = 2;
-
5. 員工@EmployeeCode的所有@LevelUp級以內的上級(@EmployeeCode和@LevelUp以變數傳入)
-
DECLARE @EmployeeCode varchar(20), @LevelUp int;
-
SET @EmployeeCode = \'N\';
-
SET @LevelUp = 2;
-
*/
-
--用遞迴CTE實現員工樹形關係表
-
-
WITH CTE AS(
-
SELECT
-
EmployeeCode,
-
ReportToCode,
-
ReportToDepth = 0,
-
ReportToPath = CAST(\'/\' + EmployeeCode + \'/\' AS varchar(200))
-
FROM #Employees
-
WHERE ReportToCode IS NULL
-
UNION ALL
-
SELECT
-
e.EmployeeCode,
-
e.ReportToCode,
-
ReportToDepth = mgr.ReportToDepth + 1,
-
ReportToPath = CAST(mgr.ReportToPath + e.EmployeeCode + \'/\' AS varchar(200))
-
FROM #Employees e
-
INNER JOIN CTE mgr
-
ON e.ReportToCode = mgr.EmployeeCode
-
)
- SELECT * FROM CTE ORDER BY ReportToPath
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22392018/viewspace-1068778/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 聊聊mysql的樹形結構儲存及查詢MySql
- oracle之樹狀結構的儲存與展示(遞迴查詢)Oracle遞迴
- 樹狀資料結構儲存方式——查詢篇資料結構
- 樹形結構的選單表設計與查詢
- Oracle 樹形結構查詢的特殊用法Oracle
- 樹的學習——樹的儲存結構
- 樹形查詢
- 樹形結構資料儲存方案(三):閉包表
- 樹形結構資料儲存方案(二): 物化路徑
- MySQL怎樣透過Adjacency List儲存樹形結構?MySql
- 樹形結構資料儲存方案(四):左右值編碼
- 樹形結構資料儲存方案(五):區間巢狀巢狀
- 樹形結構資料儲存方案(一):鄰接列表模式模式
- 資料結構-二叉樹的儲存結構與遍歷資料結構二叉樹
- oracle樹形查詢Oracle
- 二叉樹的儲存結構二叉樹
- MySql樹形結構(多級選單)查詢設計方案MySql
- JS遞迴過濾樹形結構陣列物件--模糊查詢JS遞迴陣列物件
- 樹形結構
- Hierarchical Queries 級聯查詢(樹狀結構查詢)
- NKMySQL 查詢樹結構方式gllMySql
- Oracle查詢結果 儲存為XMLOracleXML
- 迭代查詢 樹形結構及常用的函式函式
- oracle樹形選單查詢Oracle
- 資料結構與演算法——單詞查詢樹資料結構演算法
- 關於樹結構的查詢優化,及許可權樹的查詢優化優化
- layui樹形結構UI
- java樹形結構Java
- 資料結構與演算法-二叉查詢樹資料結構演算法
- Java資料結構(十五)—— 多路查詢樹Java資料結構
- Java實現遞迴查詢樹結構Java遞迴
- [js] 根據元素ID遍歷樹形結構,查詢到所有父元素IDJS
- 樹狀資料結構儲存方式—— CUD 篇資料結構
- 樹形結構處理
- 資料結構之查詢(順序、折半、分塊查詢,B樹、B+樹)資料結構
- LayUI—tree樹形結構的使用UI
- 資料結構複雜圖形儲存 PHP 版資料結構PHP
- 資料結構與演算法知識點總結(5)查詢樹資料結構演算法