获取所有子项 SQL
Get All Child SQL
我有一个 table 喜欢:
oName oPost oPoint
A 1 NULL
B 2 1
C 3 1
D 4 1
E 5 2
F 6 2
G 7 3
所以,如果我 select oName = A
那么结果应该是:
oName
A
B
C
D
E
F
G
如果我selectoName = B
,那么结果应该是:
oName
B
E
F
如何在 SQL 上执行此操作?
您可以使用递归 CTE
从指定节点开始遍历层次结构:
DECLARE @name VARCHAR(1);
SET @name = 'A';
WITH CTE AS (
SELECT oName, oPost
FROM data
WHERE oName = @name
UNION ALL
SELECT d.oName, d.oPost
FROM data d
JOIN CTE ON CTE.oPost = d.oPoint
)
SELECT oName
FROM CTE
ORDER BY oName
输出:
oName
A
B
C
D
E
F
G
或者,如果你SET @name='B'
,输出是
oName
B
E
F
我有一个 table 喜欢:
oName oPost oPoint
A 1 NULL
B 2 1
C 3 1
D 4 1
E 5 2
F 6 2
G 7 3
所以,如果我 select oName = A
那么结果应该是:
oName
A
B
C
D
E
F
G
如果我selectoName = B
,那么结果应该是:
oName
B
E
F
如何在 SQL 上执行此操作?
您可以使用递归 CTE
从指定节点开始遍历层次结构:
DECLARE @name VARCHAR(1);
SET @name = 'A';
WITH CTE AS (
SELECT oName, oPost
FROM data
WHERE oName = @name
UNION ALL
SELECT d.oName, d.oPost
FROM data d
JOIN CTE ON CTE.oPost = d.oPoint
)
SELECT oName
FROM CTE
ORDER BY oName
输出:
oName
A
B
C
D
E
F
G
或者,如果你SET @name='B'
,输出是
oName
B
E
F