亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用PostgreSQL對樹進行遍歷

發布時間:2021-07-30 09:18:47 來源:億速云 閱讀:244 作者:chen 欄目:關系型數據庫

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

昨天我用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對樹進行遍歷”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

沁源县| 始兴县| 金秀| 兴义市| 基隆市| 沙坪坝区| 综艺| 金平| 宿迁市| 曲阳县| 乳源| 嘉祥县| 金门县| 定州市| 麻栗坡县| 广元市| 临城县| 宁明县| 万全县| 来宾市| 汽车| 靖安县| 台南县| 蓬莱市| 唐海县| 赣州市| 荔波县| 河间市| 汉沽区| 桦川县| 北票市| 临安市| 吉安县| 射阳县| 鄂州市| 永城市| 阳信县| 苍山县| 兰西县| 澎湖县| 通山县|