postgresql递归查找树结构

postgresql递归

在这里插入图片描述

DROP TABLE IF EXISTS "public"."demo_tree";
CREATE TABLE "public"."demo_tree" (
  "id" varchar(64) COLLATE "pg_catalog"."default" NOT NULL,
  "name" varchar(64) COLLATE "pg_catalog"."default",
  "parent_id" varchar(64) COLLATE "pg_catalog"."default",
  "seq" int2,
  "delete_flag" int2 NOT NULL DEFAULT 0
)
;
COMMENT ON COLUMN "public"."demo_tree"."id" IS '主键';
COMMENT ON COLUMN "public"."demo_tree"."name" IS '名称';
COMMENT ON COLUMN "public"."demo_tree"."parent_id" IS '父级节点';
COMMENT ON COLUMN "public"."demo_tree"."seq" IS '排序';
COMMENT ON COLUMN "public"."demo_tree"."delete_flag" IS '是否删除';
COMMENT ON TABLE "public"."demo_tree" IS '树结构';


INSERT INTO "public"."demo_tree" VALUES ('1', '杨幂', '0', 1, 0);
INSERT INTO "public"."demo_tree" VALUES ('3', '杨幂-二级', '1', NULL, 0);
INSERT INTO "public"."demo_tree" VALUES ('4', '赵丽颖-二级', '2', NULL, 0);
INSERT INTO "public"."demo_tree" VALUES ('2', ' 赵丽颖', '0', 2, 0);
INSERT INTO "public"."demo_tree" VALUES ('5', '杨幂-3级', '3', NULL, 0);

向上递归查找父级

	 WITH RECURSIVE cte AS (
            SELECT
                n. ID,
                n. NAME,
                n.parent_id AS pid
            FROM
                demo_tree AS n
            WHERE
                n. id = '5'
            UNION ALL
                SELECT
                    r. ID,
                    r. NAME,
                    r.parent_id AS pid
                FROM
                    cte
                JOIN demo_tree AS r ON cte.pid = r. ID
        ) SELECT * FROM cte

结果
在这里插入图片描述

向下递归查所有子级

WITH RECURSIVE dict AS (
			 SELECT *
			 FROM demo_tree
			 WHERE id='3'
			 union ALL
			 SELECT demo_tree.*
			 FROM demo_tree,
				  dict
			 WHERE demo_tree.parent_id = dict.id
		)
		SELECT id AS id, name as name, parent_id as parentId
		FROM dict
		ORDER BY name

结果

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值