`
longzhun
  • 浏览: 371843 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

connect by prior(父找子,子找父)

阅读更多

详见com.ninetowns.ssh2Frame.userDataPerm.service.impl. UserDataPermManageImpl

connect by prior

connect by prior start with 经常会被用到一个表中存在递归关系的时候。比如我们经常会将一个比较复杂的目录树存储到一个表中。或者将一些部门存储到一个表中,而这些部门互相有隶属关系。这个时候你就会用到connect by prior start with

典型的使用方法就是:
select * from table connect by prior cur_id=parent_id start with cur_id=???
例如:
a            b
1           0
2           1
3           1
4           2
5           3

如果想查找a=2及其下面的所有数据,则:
select * from table connect by prior a=b start with a=2
a           b
2           1
4           2

这些只是基础,皮毛。其实只要你灵活的构造查询语句。可以得出意想不到的结果。比如生成树每一个路径。
但是这些记录组成的树必须正常才可以。如果有互为父子的情况,就会出现循环错误!


select * from tb_cus_area_cde

--
子取父
select * from tb_cus_area_cde a   
CONNECT BY PRIOR     a.c_snr_area=a.c_area_cde START WITH a.c_area_cde='1040101'

--
父取子
select * from tb_cus_area_cde a   
CONNECT BY PRIOR     a.c_area_cde=a.c_snr_area START WITH a.c_snr_area is null



注意:在用这个函数的时候,statement的参数要用 ResultSet.TYPE_SCROLL_INSENSITIVE   而不能用 ResultSet.TYPE_SCROLL_SENSITIVE,在这里再把这两个之间的区别讲讲:

1.TYPE_FORWORD_ONLY,
只可向前滚动;  
   
2.TYPE_SCROLL_INSENSITIVE,
双向滚动,但不及时更新,就是如果数据库里的数据修改过,并不在ResultSet中反应出来。  
   
3.TYPE_SCROLL_SENSITIVE
,双向滚动,并及时跟踪数据库的更新,以便更改ResultSet中的数据

 

 

分享到:
评论

相关推荐

    connect by prior数据库树的应用

    - **`CONNECT BY PRIOR`**:指定连接父节点和子节点的方式,即如何根据父子关系来构建树。 例如,在给定的部分内容中,有如下的 SQL 查询语句: ```sql SELECT * FROM t_xtgl_jcxx_district START WITH code IN ...

    Oracle start with.connect by prior子句实现递归查询

    ### Oracle Start With.Connect By Prior 子句实现递归查询 #### 概述 在Oracle数据库中,`Start With.Connect By Prior`子句是执行递归查询的一种强大工具,主要用于处理层次结构数据。这类数据通常存在于组织...

    oracle中connect-by-prior用法,实战解决日期分解问题.docx

    通过`CONNECT BY PRIOR`查询,我们可以获取整个组织架构,从根节点(如最高级别的部门)开始,递归地找出所有的子部门。 `LEVEL`关键字在处理树结构时也非常有用,它可以为每个节点分配一个层次级别,根节点的级别...

    Oracle_start_with_connect_by_prior_用法

    1. **自上而下的搜索方式**:使用`CONNECT BY PRIOR ID = PARENT_ID`表示先找父节点再找子节点。 2. **自下而上的搜索方式**:使用`CONNECT BY ID = PRIOR PARENT_ID`表示先找叶子节点再找父节点。 3. **过滤条件的...

    ORACLE查询树型关系(connect_by_prior_start_with)

    从 Oracle 9i 开始,可以通过 SYS_CONNECT_BY_PATH 函数实现将父节点到当前行内容以“path”或者层次元素列表的形式显示出来。 使用 START WITH 和 CONNECT BY 子句,可以 select 数据具有层次关系的数据,通常是...

    connect_by_prior_递归算法

    - **CONNECT BY**:定义了节点之间的连接规则,通常用于描述父节点与子节点之间的关系。 - **WHERE**:用于进一步筛选查询结果。 #### 三、示例:构建树形结构 假设我们有一个组织机构表,其中包含`org_id`和`...

    树状数据库表:Oracle中start with...connect by prior子句用法

    例如,你可以使用`CONNECT BY PRIOR ID = PARENT_ID AND LEVEL ,这将遍历到第五级的子节点。 4. **LEVEL伪列**: Oracle在`CONNECT BY`查询过程中自动提供了一个`LEVEL`伪列,它表示当前行在树结构中的深度,从1...

    Oracle递归查询start with connect by prior的用法

    select 1 from 表格 start with … connect by prior id = pId start with:表示以什么为根节点,不加限制可以写1=1,要以id为123的节点为根节点,就写为start with id =123 connect by:connect by是必须的,...

    oracle中connect-by-prior用法,实战解决日期分解问题.pdf

    例如,`CONNECT BY PRIOR org_id = parent_id`表明当前行的`org_id`应该等于前一行的`parent_id`,这样就按照父-子关系构建了整个树。 - `WHERE`子句则用于进一步筛选满足特定条件的记录。 在树结构的遍历过程中,...

    MySQL多种递归查询方法.docx

    - `CONNECT BY PRIOR`: 定义递归关系,即子节点与父节点之间的关联方式。 - `child_column` 和 `parent_column`: 分别代表子节点列和父节点列。 **四种递归查询情况**: - **第一种情况**: `PRIOR`在子节点端(向下...

    Oracle_start_with_connect_by_prior_用法[文].pdf

    要的时候有两种写法:CONNECT BY PRIOR EMPNO=MGR 或 CONNECT BY EMPNO=PRIOR MGR,前一种写法表示采用自上而下的搜索方式(先找父节点然后找子节点),后一种写法表示采用自下而上的搜索方式(先找叶子节点然后找父...

    connect by的使用

    - `CONNECT BY` 子句指定了连接当前行和父行的条件,`PRIOR` 关键字用来引用父行的列。 2. **层级连接条件** `condition2`通常包含`PRIOR`关键字和一个字段名,表示当前行的某个字段与父行的某个字段的关系。例如,...

    Oracle的Connect By使用示例

    1. **Connect By**:用于指定层级关系中的父节点与子节点之间的连接条件。例如,在一个员工表中,如果想要查找所有下属及其下属的下属,可以使用`CONNECT BY PRIOR employee_id = manager_id`这样的表达式来定义上...

    connect by的使用探索

    [START WITH condition CONNECT BY PRIOR condition] [ WHERE condition ][ [ START WITH condition ] CONNECT BY condition [ ORDER SIBLINGS BY expression ] ] ``` 其中,`START WITH`子句用于指定查询的起始...

    oracle connect by level 应用

    在上述查询中,`PRIOR`关键字用于引用当前行的前一行,`CONNECT BY`后的条件(`PRIOR EMPLOYEE_ID = MANAGER_ID`)表示当前行的上级ID等于前一行的员工ID。`LEVEL`伪列则记录了每一行在整个层级结构中的深度,根节点...

    Oracle递归树形结构查询功能

    例如,`CONNECT BY PRIOR dept_id = par_dept_id`表示当前行的父节点的`dept_id`等于上一行的`par_dept_id`。 - `WHERE`:可选的过滤条件,用于进一步限制返回的记录。 - `ORDER BY`:对返回的记录进行排序,通常...

    浅谈Oracle下connect by原理.pdf

    文章中给出了一个名为`t_test_connectby`的数据表例子,其中包含父子关系的节点数据。通过该表,我们可以更直观地了解Connect By的执行过程。 - 不指定起始条件时,使用`CONNECT BY`: ```sql SELECT * FROM t_test...

    oracle prior

    PRIOR 运算符被置于 CONNECT BY 子句中等号的后面时,则强制从叶节点到根节点的顺序检索,即由子节点向父节点方向通过树结构,我们称之为自底向上的方式。例如: ```sql CONNECT BY EMPNO=PRIOR MGR ``` 在这种...

    oracle 树型的寻父或寻子

    例如,如果我们有一个员工表(EMPLOYEE),其中PARENT_EMP_ID字段表示父员工ID,那么以下查询可以找出所有属于某个员工的子员工: ```sql SELECT LEVEL, EMPLOYEE_NAME, EMPLOYEE_ID FROM EMPLOYEE START WITH ...

Global site tag (gtag.js) - Google Analytics