获取所有子SQL
我有一张像这样的桌子:获取所有子SQL,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我有一张像这样的桌子: oName oPost oPoint A 1 NULL B 2 1 C 3 1 D 4 1 E 5 2 F 6 2 G 7 3 因此,如果我选择了oName=A,那么结果应该是: oName A B C D E F G oName B E F 如
oName oPost oPoint
A 1 NULL
B 2 1
C 3 1
D 4 1
E 5 2
F 6 2
G 7 3
因此,如果我选择了oName=A
,那么结果应该是:
oName
A
B
C
D
E
F
G
oName
B
E
F
如果我选择oName=B,那么结果应该是:
oName
A
B
C
D
E
F
G
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
或者,如果设置@name='B'
,则输出为
oName
B
E
F
您可以使用递归的
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
或者,如果设置@name='B'
,则输出为
oName
B
E
F
@Haminteu不用担心-我很高兴能帮上忙。@Haminteu不用担心-我很高兴能帮上忙。