zoukankan      html  css  js  c++  java
  • Oracle树形查询

    sql树形递归查询是数据库查询的一种特殊情形,也是组织结构、行政区划查询的一种最常用的的情形之一。下面对该种查询进行一些总结:

    start with子句: 递归的条件,需要注意的是如果with后面的值是子节点那么求出的就是他的父节点和祖宗节点,如果是父节点那么求出的就是他的子节点和子孙节点,

    connect by子句:连接条件。 关键词prior,prior跟它右边的父节点放在一起(a.parent_org)表示往父节点方向遍历, 反之,如果 prior跟子节点放在一起( a.org_id)表示往

    叶子方向遍历。 这里需要注意的  a.org_id放在prior关键词的前面或者后面都没什么关系,也就是上面可以这样写 a.org_id= prior a.parent_org。重要的是prior旁边放的是什么。

    level伪列: 递归的层次表示, 用来进行输出缩进。可以看到递归层次,看起来很直观。 需要注意的是Level 也可以放在Group by后面,也可以放在select 后面.

    1.查询某个节点下的子孙节点

    select a.org_id,a.org_name, a.org_level, a.parent_org,level
    from dir_organ a
    start with a.parent_org=203
    connect by prior a.org_id=a.parent_org;

    2.查找节点的祖先节点

    select a.org_id,a.org_name, a.org_level, a.parent_org,level
    from dir_organ a
    start with a.parent_org=203
    connect by prior a.parent_org=a.org_id ;

    3.start with 和connect by prior的位置可以互换:  

    select a.org_id, a.org_name, a.org_level, a.parent_org, level
    from dir_organ a
    connect by prior a.org_id = a.parent_org
    start with a.parent_org = 203;

  • 相关阅读:
    单独的数字
    设计模式之原型模式
    设计模式之策略模式
    设计模式之单例模式
    泛型入门
    iOS中关于.pch的新建与配置问题
    iOS开发中遇到的头文件找不到的问题解决办法
    iOS中NSJSONSerialization的使用 小记
    6.线程、进程、协程基础篇
    5.装饰器进阶篇
  • 原文地址:https://www.cnblogs.com/duanxianyouyang/p/10697249.html
Copyright © 2011-2022 走看看