postgresql、mysql8使用with recursive完成迭代查询
阅读数:203 评论数: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,为向下查询。