news 2026/5/23 0:52:15

Oracle 数据库中递归查询

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Oracle 数据库中递归查询

方法一:使用 CONNECT BY(传统方式)
-- 假设表名为 my_table,字段为 id 和 parent_id
SELECT id
FROM my_table
START WITH id = '根节点ID' -- 从根节点开始
CONNECT BY PRIOR id = parent_id -- 递归条件:父节点的 id = 子节点的 parent_id
MINUS -- 去重(可选)


-- 或者使用 NOT EXISTS 来筛选叶子节点
SELECT id
FROM my_table t
WHERE NOT EXISTS (
SELECT 1
FROM my_table t2
WHERE t2.parent_id = t.id
)
START WITH id = '根节点ID'
CONNECT BY PRIOR id = parent_id;


方法二:使用 WITH 递归(推荐,更标准)
WITH RECURSIVE cte AS (
-- 基础查询:从根节点开始
SELECT id, parent_id, 1 as level
FROM my_table
WHERE id = '根节点ID' -- 替换为实际的根节点ID

UNION ALL

-- 递归查询:查找所有子节点
SELECT t.id, t.parent_id, c.level + 1
FROM my_table t
INNER JOIN cte c ON t.parent_id = c.id
)
-- 筛选叶子节点(没有子节点的节点)
SELECT c.id
FROM cte c
WHERE NOT EXISTS (
SELECT 1
FROM my_table t
WHERE t.parent_id = c.id
);
方法三:一步到位(最简洁)
WITH cte AS (
SELECT id, parent_id
FROM my_table
START WITH id = '根节点ID'
CONNECT BY PRIOR id = parent_id
)
SELECT id
FROM cte c
WHERE NOT EXISTS (
SELECT 1 FROM my_table WHERE parent_id = c.id
);
示例
假设数据如下:
id | parent_id
----|----------
A | NULL (根)
B | A
C | A
D | B
E | B
查询根节点 A 的所有叶子节点:
SELECT id
FROM my_table
START WITH id = 'A'
CONNECT BY PRIOR id = parent_id
MINUS
SELECT id
FROM my_table
WHERE parent_id IS NOT NULL;
结果:C, D, E
性能优化建议
1. 创建索引:
CREATE INDEX idx_parent_id ON my_table(parent_id);
CREATE INDEX idx_id ON my_table(id);
2. 如果数据量大,考虑使用 NO_CYCLE:
START WITH id = '根节点ID'
CONNECT BY NOCYCLE PRIOR id = parent_id

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/20 21:33:16

Pixie监控工具完整使用指南:从安装到实战应用

Pixie监控工具完整使用指南:从安装到实战应用 【免费下载链接】pixie Pixie是一个开源的分布式跟踪和分析工具,用于监控和诊断Kubernetes应用程序的性能。 - 功能:分布式跟踪;性能监控;诊断;Kubernetes应用…

作者头像 李华
网站建设 2026/5/20 12:16:46

ER-Save-Editor终极教程:从零开始掌握艾尔登法环存档编辑技巧

还在为艾尔登法环中某个Boss卡关而烦恼吗?是否曾梦想打造一个完美的角色来体验不同的游戏玩法?ER-Save-Editor正是为你量身打造的解决方案!这款免费开源的艾尔登法环存档编辑器,让你轻松掌控PC和PlayStation平台的游戏数据&#x…

作者头像 李华
网站建设 2026/5/23 18:47:36

错过将落后一年:Python+C混合编程中不可不知的热点函数优化秘技

第一章:PythonC混合编程的现状与挑战Python 以其简洁语法和丰富生态广泛应用于数据分析、人工智能和Web开发等领域,但在性能敏感场景中常面临执行效率瓶颈。为弥补这一短板,开发者普遍采用 Python 与 C 语言混合编程的方式,在保持…

作者头像 李华
网站建设 2026/5/22 13:48:37

xcaddy深度解析:构建专属Caddy服务器的终极指南

xcaddy深度解析:构建专属Caddy服务器的终极指南 【免费下载链接】xcaddy Build Caddy with plugins 项目地址: https://gitcode.com/gh_mirrors/xc/xcaddy xcaddy是专为Caddy服务器设计的强大构建工具,它彻底改变了开发者集成和定制Caddy插件的方…

作者头像 李华
网站建设 2026/5/22 16:49:09

Cisco华为H3C交换机配置自动备份终极指南:告别手动备份烦恼

Cisco华为H3C交换机配置自动备份终极指南:告别手动备份烦恼 【免费下载链接】Cisco华为H3C交换机配置文件自动备份脚本 这款开源脚本专为网络管理员设计,能够自动备份Cisco、华为、H3C交换机的配置文件,极大简化了日常运维工作。对于Cisco设备…

作者头像 李华