oracle 递归查询(树结构)

oracle 数据库提供递归查询语句:

start with connect by prior:

create table provincial_city
 ( parentid varchar2(10),
  subid    varchar2(10));
insert into provincial_city values ( '陕西省', '西安市' );
insert into provincial_city values ( '陕西省', '宝鸡市' );
insert into provincial_city values ( '陕西省', '咸阳市' );
insert into provincial_city values ( '陕西省', '商洛' );
insert into provincial_city values ( '山西', '运城' );
insert into provincial_city values ( '山西', '太原' );
insert into provincial_city values ( '山西', '吕梁' );
insert into provincial_city values ( '宝鸡市', '扶风县' );
insert into provincial_city values ( '宝鸡市', '凤翔县' );
insert into provincial_city values ( '宝鸡市', '陈仓区' );
insert into provincial_city values ( '西安市', '蓝天' );
insert into provincial_city values ( '西安市', '周至' );

大多项目中基本都会有住址城市的选项,一般情况省市县都会在一个表中存放作为数据字典。下来就演示怎样使用sql查询树状结构。

要求给出其中一个结点值,求其最终父结点。以“扶风县”为例,看一下代码

select a.parentid,a.subid ,level from  provincial_city  a

start  with  a.subid='扶风县'  

connect by  subid= prior  parentid

order  by  level  desc;

parentid         subid       level                                  level可以理解为当前节点下有几个子节点

陕西省           宝鸡市     3

宝鸡市          扶风县      1

 

start with 子句:遍历起始条件,有个小技巧,如果要查父结点,这里可以用子结点的列,反之亦然。

connect by 子句:连接条件。关键词prior,prior跟父节点列parentid放在一起,就是往父结点方向遍历;prior跟子结点列subid放在一起,则往叶子结点方向遍历,

                         parentid、subid两列谁放在“=”前都无所谓,关键是prior跟谁在一起。

order by 子句:排序,不用多说。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值