获取所有子项 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

Demo on dbfiddle