Oracle递归查询的使用

Oracle递归查询的使用

使用场景

在项目中,有的时候我们需要做一些递归查询,例如地区查询,当我选择某一个省或者市时,而查询的结果不仅仅是省或市,还需要将该省或市下属的所有地区单位一起查出来,这时,就可以使用Oracle提供的递归查询语句。当然,该语法不仅能递归查询子集,也能递归查询出所有父集。

语法

SELECT * 
	FROM TABLE 
	[WHERE 条件1 AND 条件2]
	START WITH 字段1 =1
	CONNECT BY [PRIOR] 字段1 = 字段2

语义说明

  1. START WITH : 查询起点
  2. CONNECT BY : 关联条件
  3. PRIOR : 需要做递归的方向,当放在子节点字段前时,表示递归查询出所有子集。当放在父节点字段前时,表示递归查询出所有父集。如果没有prior关键字,表示不进行递归查询

实例

说明:由于涉及到项目中的隐秘内容,所以以下内容仅有编码

字段说明

PARTY_GROUP_IDPARENT_GROUP_IDGROUP_LEVEL
单位编码父节点单位编码所属层级
  1. 不包含prior关键字的查询
SELECT T.PARTY_GROUP_ID, T.PARENT_GROUP_ID, T.GROUP_LEVEL
  FROM VMS_ORG_INFO T
 START WITH T.PARTY_GROUP_ID = 10
CONNECT BY T.PARENT_GROUP_ID = T.PARTY_GROUP_ID
 ORDER BY T.GROUP_LEVEL

结果如下:

PARTY_GROUP_IDPARENT_GROUP_IDPARENT_GROUP_ID
1021

2.递归查询出子集

SELECT T.PARTY_GROUP_ID, T.PARENT_GROUP_ID, T.GROUP_LEVEL
  FROM VMS_ORG_INFO T
 START WITH T.PARTY_GROUP_ID = 10
CONNECT BY T.PARENT_GROUP_ID = PRIOR T.PARTY_GROUP_ID
 ORDER BY T.GROUP_LEVEL

结果如下:

PARTY_GROUP_IDPARENT_GROUP_IDPARENT_GROUP_ID
1021
16102
37102
52102
66102
18163
19163
40373
41373
42373

3.递归查询出父集

SELECT T.PARTY_GROUP_ID, T.PARENT_GROUP_ID, T.GROUP_LEVEL
  FROM VMS_ORG_INFO T
 START WITH T.PARTY_GROUP_ID = 40
CONNECT BY PRIOR T.PARENT_GROUP_ID = T.PARTY_GROUP_ID
 ORDER BY T.GROUP_LEVEL

结果如下:

PARTY_GROUP_IDPARENT_GROUP_IDPARENT_GROUP_ID
20
1021
37102
40373

结尾

希望我的文章能帮到大家。如果有什么写的不对或者有问题的地方,希望能多多包涵。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值