ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码
当前位置:首页 >> 数据库 >> 其他数据库 >> Oracle递归查询,Oracle START WITH查询,Oracle树查询

Oracle递归查询,Oracle START WITH查询,Oracle树查询(1/2)

来源:网络整理     时间:2018-05-15     关键词:

本篇文章主要介绍了" Oracle递归查询,Oracle START WITH查询,Oracle树查询",主要涉及到方面的内容,对于其他数据库感兴趣的同学可以参考一下: Oracle递归查询,Oracle树查询,Oracle START WITH查询================================?Copyrig...

Oracle递归查询,Oracle树查询,Oracle START WITH查询

================================

?Copyright 蕃薯耀 2018年5月14日

http://fanshuyao.iteye.com/

说明:

现在表(CMM_CODE)中有一批树结构的数据,主键为CODE_ID,以字段PARENT_CODE_ID作为父结构关联,最顶层结构的PARENT_CODE_ID为空,数据结构例子如下:

专业设施名称 > 公共服务设施 > 特殊设施

 现在要根据CODE_ID查询出完整的树结构名称,通过大于号(>)拼接起来,如上面所示。

一、方法一:使用START WITH……CONNECT BY查询,再使用SYS_CONNECT_BY_PATH拼接

SELECT CC.*,SUBSTR(SYS_CONNECT_BY_PATH(CC.CODE_NAME, '>'),2) TREE_PATH 
FROM CMM_CODE CC 
START WITH CC.Code_Id='pn_0501004' 
CONNECT BY PRIOR CC.PARENT_CODE_ID= CC.CODE_ID --此处PARENT_CODE_ID和CODE_ID顺序受PRIOR影响
;

 SYS_CONNECT_BY_PATH : 和父结构名称拼接

SUBSTR : 去除最前面的大于号(>)

CONNECT BY PRIOR :需要注意的是PRIOR 的顺序

CONNECT BY PRIOR CC.PARENT_CODE_ID= CC.CODE_ID

 和

CONNECT BY CC.PARENT_CODE_ID= PRIOR  CC.CODE_ID

 查询出来的数据是不一样。

上面sql查询结果如下:




 查询出来的数据为3条是对的,但查询出来的数据不能再进行第二次的过滤查询,会报错,如:

SELECT * FROM (
    SELECT CC.*,SUBSTR(SYS_CONNECT_BY_PATH(CC.CODE_NAME,     '>'),2) TREE_PATH 
    FROM CMM_CODE CC 
    START WITH CC.Code_Id='pn_0501004' 
    CONNECT BY PRIOR CC.PARENT_CODE_ID= CC.CODE_ID--此处    PARENT_CODE_ID和CODE_ID顺序受PRIOR影响
) TEMP WHER TEMPCODE_ID='pn_0500000'
;



而且查询出来的结构顺序是相反的,如下:

特殊设施>公共服务设施>专业设施名称

方法二:使用WM_CONCAT函数进行拼接

相关图片

相关文章