日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

postgresql 遍历参数_PostgreSQL 对简单树的遍历

發(fā)布時(shí)間:2024/10/14 数据库 64 豆豆
生活随笔 收集整理的這篇文章主要介紹了 postgresql 遍历参数_PostgreSQL 对简单树的遍历 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

昨天我用MysqL來(lái)實(shí)現(xiàn)了ORACLE的遞歸語(yǔ)句CONNECT BY, 看起來(lái)稍復(fù)雜些。今天來(lái)看看POSTGREsql如何實(shí)現(xiàn)ORACLE的CONNECT BY。

還是用昨天同樣的表以及數(shù)據(jù)。POSTGREsql自詡最像ORACLE的數(shù)據(jù)庫(kù),所以大部分語(yǔ)句也就都可以簡(jiǎn)單而且變相的實(shí)現(xiàn)了。

在這點(diǎn)上可以用他自己帶的WITH遞歸功能,還可以用第三方擴(kuò)展帶來(lái)的類(lèi)似connect by 函數(shù)。

先來(lái)看第一點(diǎn),用遞歸的WITH來(lái)展現(xiàn)這棵樹(shù)的路徑。

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ò)展帶來(lái)的CONNECT BY函數(shù)把這棵樹(shù)遍歷出來(lái)。

由于昨天設(shè)計(jì)的兩張表通過(guò)ID來(lái)關(guān)聯(lián),這個(gè)擴(kuò)展自帶的函數(shù)要把名字展現(xiàn)出來(lái)比較麻煩,索性這里我就用了一張臨時(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ò)展帶來(lái)的CONNECT BY 實(shí)現(xiàn)這棵樹(shù)的遍歷。

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é)

如果覺(jué)得編程之家網(wǎng)站內(nèi)容還不錯(cuò),歡迎將編程之家網(wǎng)站推薦給程序員好友。

本圖文內(nèi)容來(lái)源于網(wǎng)友網(wǎng)絡(luò)收集整理提供,作為學(xué)習(xí)參考使用,版權(quán)屬于原作者。

如您喜歡交流學(xué)習(xí)經(jīng)驗(yàn),點(diǎn)擊鏈接加入交流1群:1065694478(已滿(mǎn))交流2群:163560250

總結(jié)

以上是生活随笔為你收集整理的postgresql 遍历参数_PostgreSQL 对简单树的遍历的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。