zoukankan      html  css  js  c++  java
  • connect by prior start with

    oracle 中 connect by prior 实现递归查询,基本语法如下:

    SELECT * FROM tablename
    where <condition1>
    connect by prior <condition2>
    start with <condition3>

    以 Oracle 中表: employees 为例演示过程:

    employees 中和树形结构有关的字段为  employee_id, manager_id。

    截图表中部分数据并用树形结构表示出来:

    说明:分支节点为manager,同时也是employee; 叶子节点不是 manager,仅为employee。

    执行下面的 sql:

    SELECT LEVEL, 
           e.employee_id, 
           e.manager_id
      FROM employees e
     WHERE 1 = 1
    CONNECT BY PRIOR e.employee_id = e.manager_id
    START WITH e.employee_id = 101; 

    结果如下:

    下面对代码加以分析:

    -- 从 employee_id = 101开始,查询 manager_id 为 101 的节点,有:108
    -- 以 employee_id = 108 为父节点, 查询 manager_id = 108 的节点,有:109,110,111,112,113
    -- 101 -> 108 -> 109 ... 递归结束后,继续找 101 的其他子节点,有:200,203,204,205

    1.以 prior 所在等式的一侧为父节点

    CONNECT BY PRIOR e.employee_id = e.manager_id
    --即以 employee为父节点

    2.start with 是递归查询的起始点

    START WITH e.employee_id = 101
    -- 从 employee_id = 101 这个节点开始查询

    3. where 条件会对查询的所有结果进行筛选

  • 相关阅读:
    Postman post csrf_token
    CBV
    nginx+uWSGI+django部署web服务器
    JS绘图
    get_字段_display()
    limit_choices_to
    window.onload=function(){};
    模拟百度搜索项目
    事件冒泡
    解绑事件
  • 原文地址:https://www.cnblogs.com/chenyongjun/p/connect_by_prior.html
Copyright © 2011-2022 走看看