Pre*_*rón 4 sql sql-server recursive-query hierarchical-data
我有一个带有主键id和外键的自引用表parent_id。
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PK | NULL | IDENTITY |
| parent_id | int(11) | YES | | NULL | |
| name | varchar(255) | YES | | NULL | |
+------------+--------------+------+-----+---------+----------------+
Run Code Online (Sandbox Code Playgroud)
我有一个如下表(减少数据以便更清楚)
表 MySiteMap
Id Name parent_id
1 A NULL
2 B 1
3 C 1
4 D 1
20 B1 2
21 B2 2
30 C1 3
31 C2 3
40 D1 4
41 D2 4
Run Code Online (Sandbox Code Playgroud)
我想使用SQL Server查询获取层次结构:
A
|
B
|
| B1
| B2
C
|
| C1
| C2
D
|
| D1
| D2
Run Code Online (Sandbox Code Playgroud)
有什么建议么?
您可以使用通用表表达式。
WITH LeveledSiteMap(Id, Name, Level)
AS
(
SELECT Id, Name, 1 AS Level
FROM MySiteMap
WHERE Parent_Id IS NULL
UNION ALL
SELECT m.Id, m.Name, l.Level + 1
FROM MySiteMap AS m
INNER JOIN LeveledSiteMap AS l
ON m.Parent_Id = l.Id
)
SELECT *
FROM LeveledSiteMap
Run Code Online (Sandbox Code Playgroud)