樹形結構的儲存與查詢
資料庫設計中常常會遇到需要儲存樹形結構,比如員工關係表、組織結構表,等等。
點選(此處)摺疊或開啟
-
--測試資料
-
-
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遞迴
- 樹狀資料結構儲存方式——查詢篇資料結構
- 樹形結構的選單表設計與查詢
- 樹的學習——樹的儲存結構
- MySQL怎樣透過Adjacency List儲存樹形結構?MySql
- 查詢最佳化——查詢樹結構
- 二叉樹的儲存結構二叉樹
- oracle樹形查詢Oracle
- MySql樹形結構(多級選單)查詢設計方案MySql
- JS遞迴過濾樹形結構陣列物件--模糊查詢JS遞迴陣列物件
- NKMySQL 查詢樹結構方式gllMySql
- 樹形結構
- 關於樹結構的查詢優化,及許可權樹的查詢優化優化
- 資料結構與演算法-二叉查詢樹資料結構演算法
- Kotlin 鏈式儲存的二叉樹中查詢節點Kotlin二叉樹
- [js] 根據元素ID遍歷樹形結構,查詢到所有父元素IDJS
- Java實現遞迴查詢樹結構Java遞迴
- Java資料結構(十五)—— 多路查詢樹Java資料結構
- 樹狀資料結構儲存方式—— CUD 篇資料結構
- 資料結構之查詢(順序、折半、分塊查詢,B樹、B+樹)資料結構
- 儲存結構的種類與比較
- 資料結構複雜圖形儲存 PHP 版資料結構PHP
- 儲存結構
- 資料結構與演算法知識點總結(5)查詢樹資料結構演算法
- 『資料結構與演算法』二叉查詢樹(BST)資料結構演算法
- 樹形結構處理
- LayUI—tree樹形結構的使用UI
- 資料庫——查詢樹形結構某節點的所有子節點、所有父節點資料庫
- 遞迴樹形查詢所有分類遞迴
- 一本正經的聊資料結構(5):二叉樹的儲存結構與遍歷資料結構二叉樹
- C#資料結構-二叉樹-順序儲存結構C#資料結構二叉樹
- TiDB 底層儲存結構 LSM 樹原理介紹TiDB
- Seven 儲存結構與磁碟劃分
- MySQL體系結構與儲存引擎MySql儲存引擎
- 七、基本資料結構(樹形結構)資料結構
- 資料結構與演算法-二叉查詢樹平衡(DSW)資料結構演算法
- 資料結構與演算法-二叉查詢樹平衡(AVL)資料結構演算法
- 【資料結構與演算法】手撕二叉查詢樹資料結構演算法