news 2026/4/22 3:14:38

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/4/20 15:13:19

conda环境迁移实战:将本地项目无缝对接至TensorFlow-v2.9云端镜像

conda环境迁移实战:将本地项目无缝对接至TensorFlow-v2.9云端镜像 在深度学习项目的实际开发中,你是否遇到过这样的场景?—— 本地调试一切正常,模型训练顺利收敛,信心满满地把代码上传到云服务器准备用GPU加速训练&am…

作者头像 李华
网站建设 2026/4/20 14:25:21

【C语言工业控制实时响应编程】:揭秘毫秒级响应系统的设计精髓

第一章:C语言在工业控制实时响应系统中的核心地位在工业自动化与实时控制系统中,响应速度和执行可靠性是决定系统成败的关键因素。C语言凭借其接近硬件的执行效率、确定性的运行时行为以及对内存和处理器资源的精细控制能力,成为构建实时响应…

作者头像 李华
网站建设 2026/4/19 1:59:28

KnoxPatch:解锁三星设备Root后的完整功能体验

KnoxPatch:解锁三星设备Root后的完整功能体验 【免费下载链接】KnoxPatch LSPosed module to get Samsung apps/features working again in your rooted Galaxy device. 项目地址: https://gitcode.com/gh_mirrors/knox/KnoxPatch 在当今智能手机生态中&…

作者头像 李华
网站建设 2026/4/15 16:44:16

基于数据重构与阈值自适应的信用卡欺诈不平衡分类模型研究

导读: 随着信用卡交易的普及,欺诈检测已成为银行风险控制的核心挑战。该问题的关键在于欺诈交易仅占极低比例,导致数据高度不平衡,使得传统分类模型严重失效。为此,本文提出一种基于数据重构与阈值自适应的不平衡分类…

作者头像 李华
网站建设 2026/4/20 8:04:02

【专家私藏】C语言编写低功耗边缘AI固件的7个黄金法则

第一章:C语言在低功耗边缘AI设备中的核心作用 在资源受限的边缘计算场景中,C语言因其高效性、可预测性和对硬件的直接控制能力,成为开发低功耗AI设备的首选编程语言。边缘AI设备通常部署于电池供电或网络带宽有限的环境中,如智能传…

作者头像 李华
网站建设 2026/4/19 0:12:11

FP8量化技术:视频超分辨率处理的性能突破与实践指南

在AI视频处理领域,FP8量化技术正成为提升处理效率的关键突破。ComfyUI-SeedVR2_VideoUpscaler项目通过引入先进的FP8量化支持,为视频超分辨率任务带来了显著的性能优化和资源节约。这项技术特别针对现代GPU架构进行了深度优化,在保持图像质量…

作者头像 李华