测试

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

 

 

 

posted @ 2013-12-17 23:44  Genter  阅读(266)  评论(0编辑  收藏  举报

测试