postgresql递归查询使用CTE

with查询是PostgreSQL支持的高级SQL特性之一,这一特性常称为CTE(Common Table Expressions),with查询就相当于在查询中定义的临时表,应用场景层次结构或树状结构
但是递归查询有一个重要属性,RECURSIVE,使用RECURSIVE属性可以引用自己的输出,从而实现递归。

至于怎么用接下来看我的案例吧!

存在一张包含以下数据的表
postgresql递归查询使用CTE_第1张图片

当给定一个id时能得到它完整的地名,id=7时,地名是:中国辽宁沈阳和平区,当id=5时,地名是:中国辽宁大连

思路步骤
1.使用PostgreSQL的WITH查询ID为7以及以上的所有父节点和名字
2.将输出的记过的name字段合并一个,通过string_agg函数实现(函数传送门)

具体代码如下

with recursive t as(
	select * from test_area where id = 7
	union all
	select test_area.* from test_area,t where test_area.id=t.fatherid
) 
select string_agg(n.name,'') from (select name,id from t  order by id) n

总结CTE的好处
1.CTE可以简化SQL代码,减少SQL嵌套层数,提高SQL代码的可读性。
2.CTE的辅助语句只需要计算一次,在主查询中可以多次使用。
3.当不需要共享查询结果时,相比视图更轻量。

你可能感兴趣的:(知识点,postgresql)