Oracle函数sys_connect_by_path转postgresql

语法:
Oracle函数:sys_connect_by_path 主要用于树查询(层次查询) 以及 多列转行。其语法一般为:
       select ... sys_connect_by_path(column_name,'connect_symbol')  from table 
       start with ... connect by ... prior
理解:
对于数据库来说,根节点并不一定是在数据库中设计的顶级节点,而是start with开始的地方。sys_connect_by_path函数就是从start with开始的地方开始遍历,并记下其遍历到的节点,start with开始的地方被视为根节点,将遍历到的路径根据函数中的分隔符,组成一个新的字符串。sys_connect_by_path函数用connect by来寻找下一条记录,直到迭代找不到相应记录为止。概念与递归类似,connect by指定递归(连接)条件,如果条件不满足则递归结束。

SELECT
        ar.REF_ID,
        ar.ID,
        SUBSTR(SYS_CONNECT_BY_PATH(ar.NAME, '/'), 2) path 
        --SYS_CONNECT_BY_PATH ( ar.NAME, '/' ) path 
    FROM
        EMS_AREA ar START WITH ar.ID = '<ROOT>' CONNECT BY PRIOR ID = ar.PARENT_ID 

with RECURSIVE cte as
(
select A.REF_ID,A.ID,cast(A.name as varchar(100)) as path from EMS_AREA A where a.id='<ROOT>'
union all 
select k.REF_ID,k.id,cast(c.path||'/'||k.name as varchar(100)) as path  from EMS_AREA k inner join cte c on c.id = k.PARENT_ID
)select REF_ID,id,path from cte order by id;

参考 https://www.cnblogs.com/supermandy/p/7873233.html

猜你喜欢

转载自www.cnblogs.com/acme6/p/12484711.html