Oracle递归查询的使用
使用场景
在项目中,有的时候我们需要做一些递归查询,例如地区查询,当我选择某一个省或者市时,而查询的结果不仅仅是省或市,还需要将该省或市下属的所有地区单位一起查出来,这时,就可以使用Oracle提供的递归查询语句。当然,该语法不仅能递归查询子集,也能递归查询出所有父集。
语法
SELECT *
FROM TABLE
[WHERE 条件1 AND 条件2]
START WITH 字段1 = 值1
CONNECT BY [PRIOR] 字段1 = 字段2
语义说明
- START WITH : 查询起点
- CONNECT BY : 关联条件
- PRIOR : 需要做递归的方向,当放在子节点字段前时,表示递归查询出所有子集。当放在父节点字段前时,表示递归查询出所有父集。如果没有prior关键字,表示不进行递归查询
实例
说明:由于涉及到项目中的隐秘内容,所以以下内容仅有编码
字段说明
PARTY_GROUP_ID | PARENT_GROUP_ID | GROUP_LEVEL |
---|---|---|
单位编码 | 父节点单位编码 | 所属层级 |
- 不包含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_ID | PARENT_GROUP_ID | PARENT_GROUP_ID |
---|---|---|
10 | 2 | 1 |
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_ID | PARENT_GROUP_ID | PARENT_GROUP_ID |
---|---|---|
10 | 2 | 1 |
16 | 10 | 2 |
37 | 10 | 2 |
52 | 10 | 2 |
66 | 10 | 2 |
18 | 16 | 3 |
19 | 16 | 3 |
40 | 37 | 3 |
41 | 37 | 3 |
42 | 37 | 3 |
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_ID | PARENT_GROUP_ID | PARENT_GROUP_ID |
---|---|---|
2 | 0 | |
10 | 2 | 1 |
37 | 10 | 2 |
40 | 37 | 3 |
结尾
希望我的文章能帮到大家。如果有什么写的不对或者有问题的地方,希望能多多包涵。