由于是内网开发,在此就不贴图了,深感遗憾......
oracle的递归查询的语法
select * from t_table start with 字段1='字段值' connect by prior 子字段=父字段; 以字段值1为查询的根节点,向下递归查询
select * from t_table start with 字段1='字段值' connect by prior 父字段=子字段; 以字段值1为查询的根节点,向上递归查询
无数据参照的话,上面两句较为难以理解
Oracle的递归查询的start with 后的那个字段作为根, 并不是你的表的设置的根,拿一个简单的例子来说就是:
总行>北京分行>海淀分行
按照惯有理解来说,我们认为‘‘总行’’是根节点,但是在start with后如何你设置的是“北京分行”’的话,那么北京分行就做为了这个递归查询的根,最终是查不到“总行”的,“根”的含义需要你在实际的数据处理中进行加深理解
1.查询指定的节点递归到根节点的根节点的值
select id,p_id,dept_name,
connect_by_root(id) root_id,
connect_by-root(dept_name) root_dept_name
from t_dept
where id='001001001001'
start with id='001001'
connect by prior id=p_id;
注:connect_by_root是和递归查询连用的函数,获取的是根的字段信息
2.递归路径信息,比如将部门所属的层级部门一起罗列在一个字段中
select dept_id,dept_name,p_dept_id,
substr(sys_connect_by_path(dept_name,'->'),3) name_path
from t_dept_info
start with dept_id='001'
connect by prior dept_id=p_dept_id;
注:sys_connect_by_path会记录下递归查询过程中的各层级的值并将其拼接起来
它的第二个参数是一个输出格式,在每个字段前会加上这个符号