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 条件会对查询的所有结果进行筛选

  • 相关阅读:
    HMMPfam的安装使用手记(转载)
    Linux下MySQL忘记密码的解决方法
    systemctl命令
    Linux配置ssh免密登录
    Linux下scp报Permission denied错误的解决方法
    Ubuntu修改时区和时间
    Ubuntu安装JDK
    Ubuntu用apt安装MySQL
    IntelliJ IDEA集成工具Database连接MySQL8.0报错的解决方法
    tar命令
  • 原文地址:https://www.cnblogs.com/chenyongjun/p/connect_by_prior.html
Copyright © 2011-2022 走看看