在Oracle中选取有父子或树状关系的数据记录(2)

来源:未知 责任编辑:责任编辑 发表时间:2015-09-16 20:05 点击:

我们就能一次性选出如下的数据记录,也就是从“封号”这条记录开始的全部祖先节点


TopicID ParentID TopicTitle

10 9 封号!

9 6 我喜欢顶,咋地

6 5 不要发垃圾贴哦~

5 1 顶!

1 null 请教Oracle选取树状数据


以上我们就讲解了如何通过一个切入点找到某一个节点的全部后代节点或者全部祖先节点,也许您会说了,我并不需要选取全部,我只要选两层,我的树只允许显示两层。嗯,没错,这也会是常见的需求之一,不过不要紧,我们可以通过加入一个新的关键字 Level ,使用这个关键字,我们就可以控制被选出的关系层。具体的用法,我们还是以第二个SQL需求作为例子,现在假设是需要从“封号”这条数据向上找两层祖先节点出来,该如何操作呢?让我们来看SQL


SELECT Topic,ParentID,TopicTitle FROM T_TOPIC WHERE LEVEL <= 3 CONNECT BY TopicID = PRIOR ParentID START WITH TopicID = 10

大家一定注意到了这条SQL中多了这样一段子句 LELVEL <= 3 ,这个就是用来限定选取层级的子句,这条子句就确保了我们可以选取包括节点以及其向上两层祖先节点一共三层节点。LEVEL 这个子句的变化也让你得到一些更加变态[-_-!]的结果,例如我只要取当前节点的祖父节点,那只要将 Level 设定为 Level = 3,去掉一个小于号就能满足一个变态的需求了 LEVEL 除了可以设定为普通的大于、小于、等于、大于等于、小于等于之外,甚至还可以设定为 BETWEEN X AND Y,实在是一个很不错的关键字,可以让我们满足很多变态的需求。


以上就是关于 CONNECTY BY ... PRIOR ... START WITH 的基本使用方法。当然了,用户的需求永远是BT的,不过我相信通过上面的这些基本应用的组合,一定可以满足大家的需求。

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • 在oracle数据库下使用iSQL*Plus DBA访问数据库
  • oracle 让sys用户可以使用isqlplus
  • Oracle数据库Constraint约束的常用操作及异常处理
  • ORACLE10gr2数据导入MySQL方案
  • OCP043第十五讲 Database Security
  • export/import的使用
  • Oracle行列转换小结
  • Table函数使用简介
  • Bulk Collect性能分析(zz)
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1