PostgreSQL数据库使用sql语句递归分别实现查询所有的子节点、所有的父节点:with查询
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PostgreSQL数据库使用sql语句递归分别实现查询所有的子节点、所有的父节点:with查询,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2134字,纯文字阅读大概需要4分钟。
内容图文
目录
一、环境
数据库:PostgreSQL
二、准备数据
/*
Navicat PGSQL Data Transfer
Source Server : localhost_postgresql
Source Server Version : 90617
Source Host : localhost:5432
Source Database : odc_test
Source Schema : public
Target Server Type : PGSQL
Target Server Version : 90617
File Encoding : 65001
Date: 2021-04-30 22:22:15
*/
-- ----------------------------
-- Table structure for sys_area
-- ----------------------------
DROP TABLE IF EXISTS "public"."sys_area";
CREATE TABLE "public"."sys_area" (
"id" int8 NOT NULL,
"name" varchar(100) COLLATE "default" NOT NULL,
"parent_id" int8
)
WITH (OIDS=FALSE)
;
-- ----------------------------
-- Records of sys_area
-- ----------------------------
INSERT INTO "public"."sys_area" VALUES ('1', '重庆市', null);
INSERT INTO "public"."sys_area" VALUES ('2', '渝中区', '1');
INSERT INTO "public"."sys_area" VALUES ('3', '九龙坡区', '1');
INSERT INTO "public"."sys_area" VALUES ('4', '开州区', '1');
INSERT INTO "public"."sys_area" VALUES ('5', '渝北区', '1');
INSERT INTO "public"."sys_area" VALUES ('6', '两江新区', '1');
INSERT INTO "public"."sys_area" VALUES ('7', '石桥铺街道', '3');
INSERT INTO "public"."sys_area" VALUES ('8', '二郎街道', '3');
INSERT INTO "public"."sys_area" VALUES ('9', '大进镇', '4');
-- ----------------------------
-- Alter Sequences Owned By
-- ----------------------------
-- ----------------------------
-- Primary Key structure for table sys_area
-- ----------------------------
ALTER TABLE "public"."sys_area" ADD PRIMARY KEY ("id");
三、根据父节点ID获取所有子节点
WITH RECURSIVE cte AS (
SELECT
n. ID,
n. NAME,
n.parent_id AS pid
FROM
sys_area AS n
WHERE
n. ID = 1
UNION ALL
SELECT
r. ID,
r. NAME,
cte. ID AS pid
FROM
cte
JOIN sys_area AS r ON r.parent_id = cte. ID
) SELECT
*
FROM
cte
结果信息:
四、根据子节点获取所有的父节点
WITH RECURSIVE cte AS (
SELECT
n. ID,
n. NAME,
n.parent_id AS pid
FROM
sys_area AS n
WHERE
n. NAME LIKE '%二郎%'
UNION ALL
SELECT
r. ID,
r. NAME,
r.parent_id AS pid
FROM
cte
JOIN sys_area AS r ON cte.pid = r. ID
) SELECT
*
FROM
cte
结果信息:
内容总结
以上是互联网集市为您收集整理的PostgreSQL数据库使用sql语句递归分别实现查询所有的子节点、所有的父节点:with查询全部内容,希望文章能够帮你解决PostgreSQL数据库使用sql语句递归分别实现查询所有的子节点、所有的父节点:with查询所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。