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.parent = a.children START WITH a.children ='1040101'
--父取子
select * from tb_cus_area_cde a
CONNECT BY PRIOR a.children =a.parent START WITH a.parent 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中的数据
分享到:
相关推荐
Oracle start with.connect by prior子句实现递归查询
主要给大家介绍了关于Oracle递归查询start with connect by prior、的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
NULL 博文链接:https://yunqiang-zhang-hotmail-com.iteye.com/blog/1312354
oracle中的数查询,介绍的详细,有例子。
Oracle row_number()over start with...connect by prior start with...connect by prior
oracle中 connect by prior 递归算法 Oracle中start with...connect by prior子句用法 connect by 是结构化查询中用到的
ORACLE查询树型关系(connect_by_prior_start_with)
Oracle 递归查询, start with connect by prior 用法 find_in_set 函数 concat,concat_ws,group_concat 函数 MySQL 自定义函数 手动实现 MySQL 递归查询 Oracle 递归查询 在 Oracle 中是通过 start ...
Oracle_start_with_connect_by_prior_用法[文].pdf
一、 ORA-01436报错 开发遇到一个报错 ORA-01436: CONNECT BY loop in user data (ORA-01436: 用户数据中的 CONNECT BY 循环)。...CONNECT BY PRIOR r1.region_id = r1.parent_id; 如果数据在region
oracle菜单树查询 使用实例 使用START WITH CONNECT BY PRIOR子句实现递归查询
前言 对于数据库中的树形结构数据,如部门表,有时候,我们需要知道某部门的所有下属部分或者某部分的所有上级部门,这时候就需要用到...select 1 from 表格 start with … connect by prior id = pId start with
Oracle使用递归查询。查询树结构的sql。在Oracle中,递归查询要用到start with ……connect by prior……
Oracle SELECT语句中的START WITH和CONNECT BY...START WITH子句指定被认为是层次起点,或“根”的一行或几行,然后CONNECT BY PRIOR子句指明哪些行彼此关联。本文将为大家介绍如何在Oracle层次查询中给SIBLINGS排序。
Oracle中的select语句可以用START WITH…CONNECT BY PRIOR子句实现递归查询,connect by 是结构化查询中用到的,其基本语法是: select * from tablename start with cond1 connect by cond2 where cond3; ...
在使用start with connect by prior进行树型查询时,若是需要对数据进行过滤时,其过滤条件的位置需要慎重考虑。过滤条件的位置会对查询结果造成不同的影响。
oracle中的select语句可以用START WITH…CONNECT BY PRIOR子句实现递归查询,connect by 是结构化查询中用到的,其基本语法是: 代码如下:select * from tablename start with cond1 connect by cond2 where cond3;...
select * from table1 c start with c.p_id='0000000' connect by prior c.id=c.p_id and c.use_yn='Y' order by id ; 2. 查询节点中所有的层级关系 SELECT RPAD( ' ', 2*(LEVEL-1), '-' ) || DEPNAME "DEPNAME",...
Connect to a server and parse JSON data Take advantage of CocoaPods to use third-party libraries Utilize a clean and effective architecture to decrease complexity and speed up development Work with ...