【原创】PostgreSQL 对简略树的遍历51CTO博客 - 乐橙lc8

【原创】PostgreSQL 对简略树的遍历51CTO博客

2019年02月28日10时40分10秒 | 作者: 鑫鹏 | 标签: 遍历,完成,能够 | 浏览: 246

昨日我用MySQL来完成了ORACLE的递归句子CONNECT BY, 看起来稍杂乱些。今日来看看POSTGRESQL怎么完成ORACLE的CONNECT BY。

仍是用昨日相同的表以及数据。POSTGRESQL自诩最像ORACLE的数据库,所以大部分句子也就都能够简略并且变相的完成了。

在这点上能够用他自己带的WITH递归功用,还能够用第三方扩展带来的相似connect by 函数。


先来看第一点,用递归的WITH来展示这棵树的途径。

t_girl=# with recursive tmp_country(id,path) as 
t_girl-# (
t_girl(# select a.id,/||b.name as "path" from country_relation as a  inner join country as b on (a.id = b.id) where a.parentid is null
t_girl(# union all
t_girl(# select a.id,q.path||/||b.name  as "path" from country_relation as a inner join tmp_country as q on (q.id = a.parentid)
t_girl(# inner join country as b on (a.id = b.id)
t_girl(# )
t_girl-# select a.path from tmp_country as a;
                     path                      
-
 /Earth
 /Earth/North America
 /Earth/South America
 /Earth/Europe
 /Earth/Asia
 /Earth/Africa
 /Earth/Australia
 /Earth/North America/Canada
 /Earth/North America/Central America
 /Earth/North America/Island Nations
 /Earth/North America/United States
 /Earth/North America/United States/Alabama
 /Earth/North America/United States/Alaska
 /Earth/North America/United States/Arizona
 /Earth/North America/United States/Arkansas
 /Earth/North America/United States/California
(16 rows)
Time: 3.260 ms


还能够用tablefunc扩展带来的CONNECT BY函数把这棵树遍历出来。

因为昨日规划的两张表经过ID来相关,这个扩展自带的函数要把姓名展示出来比较费事,干脆这儿我就用了一张暂时表保存我想要的成果。

t_girl=# CREATE TEMPORARY TABLE tmp_country_relation  as SELECT b.id,a.name,b.parentid,::text as parentname FROM country AS a,country_relation AS b WHERE a.id = b.id;      
SELECT 16
Time: 11.773 ms
t_girl=#


这儿更新了对应的ID为NAME。

t_girl=# update tmp_country_relation set parentname = a.name from country as a where parentid = a.id;
UPDATE 15
Time: 1.829 ms

我用TABLEFUNC扩展带来的CONNECT BY 完成这棵树的遍历。

t_girl=# select path from connectby(tmp_country_relation as a,a.name,a.parentname,Earth,0,/) as g(id text,parentid text,level int,path text) order by level;   
                     path                     

 Earth
 Earth/Australia
 Earth/North America
 Earth/Africa
 Earth/South America
 Earth/Europe
 Earth/Asia
 Earth/North America/Island Nations
 Earth/North America/Canada
 Earth/North America/Central America
 Earth/North America/United States
 Earth/North America/United States/California
 Earth/North America/United States/Arkansas
 Earth/North America/United States/Alabama
 Earth/North America/United States/Alaska
 Earth/North America/United States/Arizona
(16 rows)
Time: 5.974 ms
t_girl=#


版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表乐橙lc8立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章