oracle树形查询

CREATE TABLE "T_FUNCTION"
(
"ID" VARCHAR2(32 CHAR) PRIMARY KEY NOT NULL ENABLE,
"NAME" VARCHAR2(50 CHAR) NOT NULL ENABLE,
"PARENT_ID" VARCHAR2(32 CHAR),
CONSTRAINT "FK_C5438E4C3CE14B18944E16AB6F0" FOREIGN KEY ("PARENT_ID") REFERENCES "T_FUNCTION" ("ID") ENABLE
)

插入测试数据:
Insert into T_FUNCTION (ID,PARENT_ID) values ('1',null);
Insert into T_FUNCTION (ID,PARENT_ID) values ('2',null);
Insert into T_FUNCTION (ID,PARENT_ID) values ('3','2');
Insert into T_FUNCTION (ID,PARENT_ID) values ('4','2');
Insert into T_FUNCTION (ID,PARENT_ID) values ('5','1');
Insert into T_FUNCTION (ID,PARENT_ID) values ('6','5');
Insert into T_FUNCTION (ID,PARENT_ID) values ('7','1');
Insert into T_FUNCTION (ID,PARENT_ID) values ('8','3');
Insert into T_FUNCTION (ID,PARENT_ID) values ('9','7');

树形查询关键词:connect by prior ... start with ...

select * from t_function f where 1=1 connect by prior f.id=f.parent_id start with f.id='1'

查询结果:
id parent_id
1 null
5 1
7 1
6 5
9 7
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle树形查询是一种在数据库中构建和查询树形结构数据的方法,常用于处理层次结构数据,如组织机构、分类目录等。以下是Oracle树形查询的用法: 1. 使用CONNECT BY查询递归关系 在Oracle中,可以使用CONNECT BY语句查询递归关系,其中PRIOR关键字表示上一级节点,如下所示: SELECT * FROM table_name CONNECT BY PRIOR parent_id = id; 其中,table_name是要查询的表名,parent_id是父节点的ID,id是当前节点的ID。通过CONNECT BY可以递归查询所有节点的关系,并按照层次结构返回结果。 2. 使用START WITH指定根节点 如果要从某个特定的节点开始查询,可以使用START WITH关键字指定根节点的条件,如下所示: SELECT * FROM table_name START WITH id = 1 CONNECT BY PRIOR id = parent_id; 其中,id=1表示以id为1的节点为根节点,查询所有子节点的关系。 3. 使用LEVEL返回节点层级 在树形查询中,有时需要返回每个节点的层级,可以使用LEVEL函数返回当前节点的层级,如下所示: SELECT id, name, LEVEL FROM table_name CONNECT BY PRIOR parent_id = id; 其中,LEVEL表示当前节点的层级,从1开始计算。 4. 使用SYS_CONNECT_BY_PATH返回节点路径 有时需要返回每个节点的完整路径,可以使用SYS_CONNECT_BY_PATH函数返回当前节点的路径,如下所示: SELECT id, name, SYS_CONNECT_BY_PATH(name, '/') AS path FROM table_name CONNECT BY PRIOR parent_id = id; 其中,'/'为路径分隔符,返回结果中的path列表示当前节点的完整路径。 以上是Oracle树形查询的一些常见用法,可以根据实际需求灵活使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值