PostgreSQL遍历简单树的方法教程

互联网十八般武艺 互联网十八般武艺

上次我们讲了 MySQL存储过程实现Oracle邻接模型树形处理的方法实例,现在我们来看看POSTGRESQL如何实现ORACLE的CONNECT BY,我们可以用PostgreSQL的WITH递归遍历树.

还是用上次MySQL存储过程实现Oracle邻接模型树形处理的方法实例同样的表以及数据,POSTGRESQL自诩最像ORACLE的数据库,所以大部分语句也就都可以简单而且变相的实现了.

在这点上可以用他自己带的WITH递归功能,还可以用第三方扩展带来的类似connect by 函数.

先来看第一点,用递归的WITH来展现这棵树的路径,代码如下:

  1. t_girl=#withrecursivetmp_country(id,path)as
  2. t_girl-#(
  3. t_girl(#selecta.id,'/'||b.nameas"path"fromcountry_relationasainnerjoincountryasbon(a.id=b.id)wherea.parentidisnull
  4. t_girl(#unionall
  5. t_girl(#selecta.id,q.path||'/'||b.nameas"path"fromcountry_relationasainnerjointmp_countryasqon(q.id=a.parentid)
  6. t_girl(#innerjoincountryasbon(a.id=b.id)
  7. t_girl(#)
  8. t_girl-#selecta.pathfromtmp_countryasa;
  9. path--phpfensi.com
  10. -----------------------------------------------
  11. /Earth
  12. /Earth/NorthAmerica
  13. /Earth/SouthAmerica
  14. /Earth/Europe
  15. /Earth/Asia
  16. /Earth/Africa
  17. /Earth/Australia
  18. /Earth/NorthAmerica/Canada
  19. /Earth/NorthAmerica/CentralAmerica
  20. /Earth/NorthAmerica/IslandNations
  21. /Earth/NorthAmerica/UnitedStates
  22. /Earth/NorthAmerica/UnitedStates/Alabama
  23. /Earth/NorthAmerica/UnitedStates/Alaska
  24. /Earth/NorthAmerica/UnitedStates/Arizona
  25. /Earth/NorthAmerica/UnitedStates/Arkansas
  26. /Earth/NorthAmerica/UnitedStates/California
  27. (16rows)
  28. Time:3.260ms

还可以用tablefunc扩展带来的CONNECT BY函数把这棵树遍历出来,由于昨天设计的两张表通过ID来关联,这个扩展自带的函数要把名字展现出来比较麻烦,索性这里我就用了一张临时表保存我想要的结果,代码如下:

  1. t_girl=#CREATETEMPORARYTABLEtmp_country_relationasSELECTb.id,a.name,b.parentid,''::textasparentnameFROMcountryASa,country_relationASbWHEREa.id=b.id;
  2. SELECT16
  3. Time:11.773ms
  4. t_girl=#

这里更新了对应的ID为NAME,代码如下:

  1. t_girl=#updatetmp_country_relationsetparentname=a.namefromcountryasawhereparentid=a.id;
  2. UPDATE15
  3. Time:1.829ms

我用TABLEFUNC扩展带来的CONNECT BY 实现这棵树的遍历,代码如下:

  1. t_girl=#selectpathfromconnectby('tmp_country_relationasa','a.name','a.parentname','Earth',0,'/')asg(idtext,parentidtext,levelint,pathtext)orderbylevel;
  2. path
  3. ----------------------------------------------
  4. Earth
  5. Earth/Australia
  6. Earth/NorthAmerica
  7. Earth/Africa
  8. Earth/SouthAmerica
  9. Earth/Europe
  10. Earth/Asia
  11. Earth/NorthAmerica/IslandNations
  12. Earth/NorthAmerica/Canada
  13. Earth/NorthAmerica/CentralAmerica
  14. Earth/NorthAmerica/UnitedStates
  15. Earth/NorthAmerica/UnitedStates/California
  16. Earth/NorthAmerica/UnitedStates/Arkansas
  17. Earth/NorthAmerica/UnitedStates/Alabama
  18. Earth/NorthAmerica/UnitedStates/Alaska
  19. Earth/NorthAmerica/UnitedStates/Arizona
  20. (16rows)
  21. Time:5.974ms
  22. t_girl=#

相关广告
  • PostgreSQL遍历简单树的方法教程 PostgreSQL遍历简单树的方法教程 PostgreSQL遍历简单树的方法教程
相关阅读

PostgreSQL遍历简单树的方法教程

2019/10/10 17:32:08 | 谷歌SEO算法 | 友情链接作弊