Oracle查询树结构表

11月最后一天,赶紧写多一篇凑够四篇

对于树状结构的表,即有记录父节点或子节点的表,如果不知道到底有多少层级,Oracle有自带的函数可以处理查询

语法

select…start with… connect by …prior

select A from B where C = ‘D’
start with Id = ‘1’ connect by PreId = prior Id

prior代表的是父亲的位置,如果是 connect by prior PreId = Id的话,证明PreId是父节点的属性,反之,则代表Id是Prior的属性

解析:
select语句查出来的结果再前,Id是标识码,PreId是父节点的Id。
Start with 是开始的节点,此处起始节点Id为1

另外,由于查出来的都是单一层级的,不知道他的上一层级,或者是最高层级的结构。如果需要获得每一层树结构的某个属性,可以用SYS_CONNECT_BT_PATH()函数获取信息
如:

SYS_CONNECT_BY_PATH (ZDDM, ‘/’) AS PATH,

这样可以将每一个节点的ZDDM列,用’/’连接成字符串,然后存在PATH中。
效果如下:
这里写图片描述
层级不同,长度也不同
然后在用substr() 和 instr()来截取操作字符串。

实际操作,对于表:

这里写图片描述

这是实际的表结构,有树状的层次关系

如果需要查“农用地”下的所有节点,可以用sql

select * from T_SJZD
start with bsm = ‘12953’
connect by SJZDBSM = prior bsm

结果如下
这里写图片描述

最开头的节点就没了

网上找到更详细的查询方法,包括查亲兄弟、族兄弟、叔伯父等节点的方法:
http://blog.csdn.net/lisheng19870305/article/details/53669460

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

话与山鬼听

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值