postgresql使用with recursive完成迭代查询

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

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

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,为向下查询。

猜你喜欢

转载自blog.csdn.net/CHS007chs/article/details/85256922
今日推荐