麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數據庫 > PostgreSQL > 正文

PostgreSQL遍歷簡單樹的方法教程

2024-09-07 00:19:29
字體:
來源:轉載
供稿:網友
  上次我們講了 MySQL存儲過程實現Oracle鄰接模型樹形處理的方法實例,現在我們來看看POSTGRESQL如何實現ORACLE的CONNECT BY,我們可以用PostgreSQL的WITH遞歸遍歷樹.
 
  還是用上次MySQL存儲過程實現Oracle鄰接模型樹形處理的方法實例同樣的表以及數據,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   --phpfensi.com
  -----------------------------------------------
   /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=#。
 

(編輯:武林網)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 成人在线网站 | 免费视频一区 | 亚洲小视频在线 | 国产人成精品综合欧美成人 | 精品三区视频 | 一级黄色片武则天 | 91精品国| xxxⅹ96日本护士hd | 国产精品99久久99久久久二 | 欧美www| 国产国语毛片 | 国产寡妇xxxxxxxx性开放 | 欧美性激情视频 | 色污视频在线观看 | 国产精品成人一区 | 黄色成年在线观看 | 天天夜碰日日摸日日澡性色av | 久久久久久久久久综合 | 香蕉国产在线视频 | 免费黄色小网站 | 欧美不卡在线 | 91九色电影| 午夜视频福利 | 狼人狠狠干 | 午夜精品成人 | 亚洲人成中文字幕在线观看 | 一本色道精品久久一区二区三区 | 欧洲黄色一级视频 | 欧美特黄一级高清免费的香蕉 | 国产日韩在线观看一区 | 欧美成人一区免费视频 | 99精品国产一区二区三区 | 黄色大片在线免费观看 | 国产剧情在线观看一区二区 | 蜜桃视频网站www | 久久国产精品影视 | 青草久久久久 | 手机在线看片国产 | 久久久麻豆 | 成年片在线观看 | 国产精品成人免费一区久久羞羞 |