postgresql、mysql8使用with recursive完成迭代查询

阅读数:216 评论数:0

跳转到新版页面

分类

算法/数据结构

正文

向上查询(查询所有父节点)

注意,这里返回的记录包含自己。

WITH RECURSIVE res AS (
  SELECT t1.* FROM t_code as t1  
  WHERE t1.enable = 'true' and t1.id = '4'
 
  UNION 
    SELECT t2.* from t_code as t2
    INNER JOIN res as t3 ON t2.id = t3.parent_id
    WHERE t2.enable = 'true'
)SELECT res.* from res

向下查询(查询所有孩子节点)

注意,这里返回的记录包含自己。

和上面的sql只有一个差别:

INNER JOIN res as t3 ON t3.id = t2.parent_id

综上所述,可以将该段sql看做三个部分组成:(1)初始条件。(2)迭代条件。(3)将结果作为下一个迭代的初始条件。

其中迭代条件中,写作inner join res as t3 on t3.id=t2.parent_id时,是表示上一次查询的结果(t3)是此时查询记录(t2)的父亲。即即始终用parent来查询children,为向下查询。

 




相关推荐