postgresql 遍历参数_PostgreSQL 对简单树的遍历
昨天我用MysqL來實(shí)現(xiàn)了ORACLE的遞歸語(yǔ)句CONNECT BY, 看起來稍復(fù)雜些。今天來看看POSTGREsql如何實(shí)現(xiàn)ORACLE的CONNECT BY。
還是用昨天同樣的表以及數(shù)據(jù)。POSTGREsql自詡最像ORACLE的數(shù)據(jù)庫(kù),所以大部分語(yǔ)句也就都可以簡(jiǎn)單而且變相的實(shí)現(xiàn)了。
在這點(diǎn)上可以用他自己帶的WITH遞歸功能,還可以用第三方擴(kuò)展帶來的類似connect by 函數(shù)。
先來看第一點(diǎn),用遞歸的WITH來展現(xiàn)這棵樹的路徑。
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擴(kuò)展帶來的CONNECT BY函數(shù)把這棵樹遍歷出來。
由于昨天設(shè)計(jì)的兩張表通過ID來關(guān)聯(lián),這個(gè)擴(kuò)展自帶的函數(shù)要把名字展現(xiàn)出來比較麻煩,索性這里我就用了一張臨時(shí)表保存我想要的結(jié)果。
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=#
這里更新了對(duì)應(yīng)的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擴(kuò)展帶來的CONNECT BY 實(shí)現(xiàn)這棵樹的遍歷。
t_girl=# select path from connectby('tmp_country_relation as a','a.name','a.parentname','Earth','/') 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=#
總結(jié)
如果覺得編程之家網(wǎng)站內(nèi)容還不錯(cuò),歡迎將編程之家網(wǎng)站推薦給程序員好友。
本圖文內(nèi)容來源于網(wǎng)友網(wǎng)絡(luò)收集整理提供,作為學(xué)習(xí)參考使用,版權(quán)屬于原作者。
如您喜歡交流學(xué)習(xí)經(jīng)驗(yàn),點(diǎn)擊鏈接加入交流1群:1065694478(已滿)交流2群:163560250
總結(jié)
以上是生活随笔為你收集整理的postgresql 遍历参数_PostgreSQL 对简单树的遍历的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql scope runtime_
- 下一篇: python合并excel文件关键字_p