oracle实现递归查询

语法

select ... from  表
where 过滤条件
start with 查询结果根结点的限定条件
connect by 连接条件;

例子

create table test(

id number,
parent_id number,
name varchar2(100)
);

假设根节点id为1

全部数据(正向递归)

select * from test start with id=1 connect by prior id =parent_id;

假设最底层记录id为5

id为5的记录的反向数据(反向递归)

select * from test start with id=5 connect by prior parent_id=id;

注意:如果省略了prior关键字,则不会进行深层递归。

时间: 2024-08-22 07:49:34

oracle实现递归查询的相关文章

《oracle数据库递归查询以及给结果赋初值》

CR CREATE TABLE USERS.TBL_TEST ( ID    NUMBER, NAME  VARCHAR2(100 BYTE), PID   NUMBER                                  DEFAULT 0 ) INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('1','10','0'); INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('2','11','1' INSERT IN

ORACLE数据库递归查询当前节点的父节点和子节点(tree)

ORACLE 数据库递归查询当前数据的所有孩子数据(不包含自己) SELECT id   AS id,   parent_id AS parentId,   parent_id AS parent,   name      AS text FROM mdm_center   START WITH parent_id = #{parentId}   CONNECT BY prior id  = parent_id ORACLE数据库查询当前数据的所有父数据(包含自己) SELECT id   AS

Oracle 递归查询

1 select a.accountcodeid, a.accountcode, a.accountcodename, 2 SYS_CONNECT_BY_PATH(a.accountcodename, '\') as fullname, a.parentcodeid, level 3 from fm_accountcode a 4 where a.accountcodeid >= 10000 5 start with a.parentcodeid is null 6 connect by pri

Oracle递归查询树结构

之前在工作中碰到一个问题,需要找树结构下的所有子节点,如果用程序写会反复查询数据库,对性能有影响,在网上找了下,可以用Oracle的递归查询,例子如下: create table test1 ( cid int, cpid int ) insert into test1 (cid,cpid) values(1,0); insert into test1 (cid,cpid) values(2,1); insert into test1 (cid,cpid) values(3,1); insert

你搞懂 ORACLE、 SQLSERVER、MYSQL与DB2的区别了吗

ORACLE. SQLSERVER.MYSQL与DB2的区别--平台性:    Oracle.MYSQL与DB2可在所有主流平台上运行:    SQL Server只能在Windows下运行: --安全性:    Oracle的安全认证获得最高认证级别的ISO标准认证,而SQL Server并没有获得什么安全认证:    这方面证明了Oracle的安全性是高于SQL Server的: --数据类型.函数.sql语句:    oracle中有复合数据类型,sql server中没有: 总之:   

测试工程师的一些面试题目(python)和总结

(一)说明 1.记录自己面试测试工程师时遇到的一些编程题(python). 2.回顾下面试的过程,做个总结. (二)题目 1.输入:JSON {"a":"aa","b":"bb","c":{"d":"dd","e":"ee"}}   输出:字典 {'a': 'aa', 'b': 'bb', 'd': 'dd', 'e': 'ee

oracle 中 Start with...connect by 的用法(递归查询)

阿里电面问到了相关的知识,在网上找到这方面的文章. 这几个关键字是查询递归数据的,形成一个树状结构.目前只有oracle支持,其他数据都要结合存储过程实现 语法: select * from some_table [where 条件1] connect by [条件2] start with [条件3]; 其中 connect by 与 start with 语句摆放的先后顺序不影响查询的结果,[where 条件1]可以不需要.  [where 条件1].[条件2].[条件3]各自作用的范围都不

关于Oracle、SqlServer 的sql递归查询

递归查询所有子节点 oracle SELECT * FROM hrmdepartment              START WITH  id=22              CONNECT BY PRIOR id=supdepid sqlserver with result_table as               (                  select a.id,a.lastname,a.managerid from hrmresource a where id=321 

Oracle递归查询的原理

在Oracle 10g下,来到scott用户下,分别以层次 1,2,3,4上的节点做实验: 当start with是根节点(level=1),要查其子节点,connect by pump和emp都是被扫描4次(总的层次). 当start with是根节点(level=2),要查其子节点,connect by pump和emp被扫描3次. 当start with是根节点(level=3),要查其子节点,connect by pump和emp被扫描2次. 当start with是根节点(level=