资讯专栏INFORMATION COLUMN

我对Postgresql递归查询的理解

kaka / 2363人阅读

摘要:先声明,瞎猜的,个人理解,不一定对。重复执行步骤和,只是这里执行第步的时候,从中选出的记录为执行第步,就变成了,就变成了找的儿子记录如果第步返回多条记录,类似啦,反正递归嘛如此,自顶向下,一棵树就出来了

先声明,瞎猜的,个人理解,不一定对。

递归查询大家都知道,常见的如一张表,包含id(主键),parent_id(该记录的父亲id),比如我们要从某1个id往下找他所有的儿子还有孙子(这时候心里要有一颗树的形象),该怎么写?

WITH RECURSIVE cat AS (
    SELECT
        *
    FROM
        category A
    WHERE
        A . ID = 1
    UNION ALL
        SELECT
            fz.*
        FROM
            category fz
        INNER JOIN cat ON fz. parent_id = cat.id
) SELECT
    *
FROM
    cat;

解释一下(注意RECURSIVE关键字):

执行子查询SELECT * FROM category A WHERE A . ID = 1(UNION
ALL之前的部分),这个作为起点

执行外层 select * from cat(把AS后面的子查询整体当作cat),这时候因为已经有id等于1的记录了,所以能查到1条记录

执行子查询中union all后面的部分,即:select fz.* from category fz INNER JOIN cat
on fz.parent_id= cat.id,因为已经有1条记录,即 cat.id = 1, 所以此时该语句就变成select
fz.* from category fz INNER JOIN cat on fz.parent_id =
1,也就是找parent_id(就是父亲啦)等于1的记录,换句话说,就是在fz中找id=1的记录的儿子记录

假如第3步找到了多条记录(大于0,否则记录数为0就结束了),假设有1条记录,设该记录为r1。重复执行步骤2和3,只是这里执行第2步的时候,从cat中选出的记录为r1.id;执行第3步,就变成了:select
fz.* from category fz INNER JOIN cat on fz.parent_id=
r1.id,就变成了找r1的儿子记录

如果第4步返回多条记录,类似啦,反正递归嘛

如此,自顶向下,一棵树就出来了

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/38958.html

相关文章

  • PostgreSQL递归查询应用场景

    摘要:今天在坛子里有人提出了一个问题,问题是这样的在以下指定表中中国辽宁山东沈阳大连济南和平区沈河区现在给定一个号,想得到它完整的名字。递归往上找,直到为止。也就是最高层级时结束,求完整语句。 今天在坛子里有人提出了一个问题,问题是这样的:在以下指定表中 id name fatherid1 中国 02 辽宁 13 山东 14 沈阳 25 大连 26 济南 37 和平区 48 沈河区 4 现在...

    YJNldm 评论0 收藏0
  • 让 TiDB 访问多种数据源 | TiDB Hackathon 优秀项目分享

    摘要:拿到返回结果进一步的进行计算处理。比较痛苦的经历不支持,我们就只好写内置函数,就把另外一个模块拖下来,自己修改加上语法,然后在加上自己设计的内置函数。其次就是涉及的的源码模块很多,从优化器执行器内置函数以及各种各样的结构。 本文作者是来自 CC 组的兰海同学,他们的项目《让 TiDB 访问多种数据源》在本届 TiDB Hackathon 2018 中获得了二等奖。该项目可以让 TiDB...

    OBKoro1 评论0 收藏0
  • 让 TiDB 访问多种数据源 | TiDB Hackathon 优秀项目分享

    摘要:拿到返回结果进一步的进行计算处理。比较痛苦的经历不支持,我们就只好写内置函数,就把另外一个模块拖下来,自己修改加上语法,然后在加上自己设计的内置函数。其次就是涉及的的源码模块很多,从优化器执行器内置函数以及各种各样的结构。 本文作者是来自 CC 组的兰海同学,他们的项目《让 TiDB 访问多种数据源》在本届 TiDB Hackathon 2018 中获得了二等奖。该项目可以让 TiDB...

    JasonZhang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<