久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

怎么用PostgreSQL對樹進行遍歷

164次閱讀
沒有評論

共計 2531 個字符,預計需要花費 7 分鐘才能閱讀完成。

本篇內容介紹了“怎么用 PostgreSQL 對樹進行遍歷”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓丸趣 TV 小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

昨天我用 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=#

“怎么用 PostgreSQL 對樹進行遍歷”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注丸趣 TV 網站,丸趣 TV 小編將為大家輸出更多高質量的實用文章!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-04發表,共計2531字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 洛宁县| 黑龙江省| 南阳市| 改则县| 汉源县| 普定县| 顺平县| 五峰| 常宁市| 仪征市| 外汇| 尉犁县| 永康市| 镇安县| 道真| 浦江县| 承德市| 土默特左旗| 西城区| 江口县| 固始县| 德州市| 上杭县| 来宾市| 卢龙县| 云梦县| 开远市| 齐河县| 资阳市| 沿河| 抚州市| 沐川县| 乡城县| 南郑县| 城口县| 稻城县| 乌审旗| 长宁区| 五家渠市| 永仁县| 农安县|