sql - 获取所有子 SQL
问题描述
我有一张像这样的桌子:
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
,那么结果应该是:
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
推荐阅读
- python - Pygame不会改变字体
- javascript - Java脚本在删除小数时替换为空
- javascript - cookie http header 只包含一个cookie
- c# - 如何在 C# 中根据特定时区 (DD-MM-YY) / (MM-DD-YY) 显示日期时间格式
- c++ - C++ 打印二叉树中的所有值
- amazon-dynamodb - 如何停止 DynamoDB 中当前的索引创建操作?
- flask-ask - 无法安装烧瓶问
- java - Fabric Cryptogen生成的cert文件夹结构信息
- macos-high-sierra - MacOS High Sierra:Xcode 下载失败使用购买页面安装 Xcode 9.3 时出错
- javascript - 如何防止分配未定义的值代替默认值