PostgreSQL递归查询
原料
--创建组织架构表
create table "Org"(
"OrgId" character varying(50) primary key,
"ParentId" character varying(50),
"OrgName" character varying(50)
)
--添加数据
insert into "Org" ("OrgId","ParentId","OrgName") values('',null,'***集团');
insert into "Org" ("OrgId","ParentId","OrgName") values('','','子公司01');
insert into "Org" ("OrgId","ParentId","OrgName") values('','','子公司02');
insert into "Org" ("OrgId","ParentId","OrgName") values('','','子公司03');
insert into "Org" ("OrgId","ParentId","OrgName") values('','','子公司04'); insert into "Org" ("OrgId","ParentId","OrgName") values('','','电子商务部');
insert into "Org" ("OrgId","ParentId","OrgName") values('','','渠道合作部');
insert into "Org" ("OrgId","ParentId","OrgName") values('','','个人业务部');
insert into "Org" ("OrgId","ParentId","OrgName") values('','','人力资源部');
insert into "Org" ("OrgId","ParentId","OrgName") values('','','运营管理部'); insert into "Org" ("OrgId","ParentId","OrgName") values('','','电子商务部');
insert into "Org" ("OrgId","ParentId","OrgName") values('','','渠道合作部');
insert into "Org" ("OrgId","ParentId","OrgName") values('','','个人业务部');
insert into "Org" ("OrgId","ParentId","OrgName") values('','','人力资源部');
insert into "Org" ("OrgId","ParentId","OrgName") values('','','运营管理部'); insert into "Org" ("OrgId","ParentId","OrgName") values('','','电子商务部');
insert into "Org" ("OrgId","ParentId","OrgName") values('','','渠道合作部');
insert into "Org" ("OrgId","ParentId","OrgName") values('','','个人业务部');
insert into "Org" ("OrgId","ParentId","OrgName") values('','','人力资源部');
insert into "Org" ("OrgId","ParentId","OrgName") values('','','运营管理部'); insert into "Org" ("OrgId","ParentId","OrgName") values('','','电子商务部');
insert into "Org" ("OrgId","ParentId","OrgName") values('','','渠道合作部');
insert into "Org" ("OrgId","ParentId","OrgName") values('','','个人业务部');
insert into "Org" ("OrgId","ParentId","OrgName") values('','','人力资源部');
insert into "Org" ("OrgId","ParentId","OrgName") values('','','运营管理部');
向下递归
--向下递归
with recursive T ("OrgId", "ParentId", "OrgName", "Depth") AS
(
select "OrgId", "ParentId", "OrgName", 1 "Depth" from "Org" where "OrgId"='' --起始节点
union all
select D."OrgId", D."ParentId", D."OrgName", T."Depth" + 1 "Depth" from "Org" D join T on D."ParentId" = T."OrgId"
)
select "OrgId", "ParentId", "OrgName", "Depth" from T
输出结果:

向上递归
--向上递归
with recursive T ("OrgId", "ParentId", "OrgName", "Depth") AS
(
select "OrgId", "ParentId", "OrgName", 1 "Depth" from "Org" where "OrgId"='' --起始节点
union all
select D."OrgId", D."ParentId", D."OrgName", T."Depth" + 1 "Depth" from "Org" D join T on D."OrgId" = T."ParentId"
)
select "OrgId", "ParentId", "OrgName", "Depth" from T
输出结果:

PostgreSQL递归查询的更多相关文章
- PostgreSQL=>递归查询
PostgreSQL=>递归查询 转载请注明源地址:http://www.cnblogs.com/funnyzpc/p/8232073.html 距上次博客更新刚好两周,这两周发生了很多,比如: ...
- PostgreSQL递归查询示例
PostgreSQL提供了WITH语句,允许你构造用于查询的辅助语句.这些语句通常称为公共表表达式或cte.cte类似于只在查询执行期间存在的临时表. 递归查询是指递归CTE的查询.递归查询在很多情况 ...
- PostgreSQL递归查询实现树状结构查询
在Postgresql的使用过程中发现了一个非常有意思的功能,就是对于须要相似于树状结构的结果能够使用递归查询实现.比方说我们经常使用的公司部门这样的数据结构.一般我们设计表结构的时候都是相似以下的S ...
- oracle和postgresql 递归查询父子关系记录语法区别
oracle: 一.数据 db数据字段如下: task_id task_name t.parent_task_id *** *** ...
- PostgreSQL 递归查询 (转)
数据库中的数据存在父子关系(单继承,每一条记录只有一个父亲). 如果要查询一条记录以及他的所有子记录,或者要查询一条记录以及他的所有父记录.那么递归查询就再合适不过了.可以简化复杂的SQL语句 现在 ...
- 对sql作业的总结(PostgreSQL的递归查询)
已知条件如下: CREATE TABLE appointment ( emp_id integer NOT NULL, jobtitle ) NOT NULL, salary ,) NOT NULL, ...
- PostgreSQL中RECURSIVE递归查询使用总结
RECURSIVE 前言 CTE or WITH 在WITH中使用数据修改语句 WITH使用注意事项 RECURSIVE 递归查询的过程 拆解下执行的过程 1.执行非递归部分 2.执行递归部分,如果是 ...
- postgresql 函数&存储过程 ; 递归查询
函数:http://my.oschina.net/Kenyon/blog/108303 紧接上述,补充一下: 输入/输出参数的函数demo(输入作为变量影响sql结果,输出作为结果返回) create ...
- PostgreSQL的递归查询(with recursive) ,替代oracle 的级联查询connect by
开发有需求,说需要对一张地区表进行递归查询,Postgres中有个 with recursive的查询方式,可以满足递归查询(一般>=2层). 测试如下: create table tb(id ...
随机推荐
- Educational Codeforces Round 37-F.SUM and REPLACE题解
一.题目 二.题目链接 http://codeforces.com/contest/920/problem/F 三.题意 给定$N$个范围在$[1, 1e6)$的数字和$M$个操作.操作有两种类型: ...
- Python中常见的数据类型总结
Python提供多种数据类型来存放数据项集合,主要包括序列(列表list和元组tuple),映射(如字典dict),集合(set),下面对这几种一一介绍: 一 序列 1.列表list 列表是一种有序的 ...
- springBatch学习 batch的使用方式(5)
首先讲一下batch框架提供的一组job执行的api 如下图 说明: 应用场景 包含三种 标准的web ,定时任务调度,命令行 1.命令行 通过命令行在单独的jvm中调用 进行批处理作业 spring ...
- 前端基础——AJAX
一 简介 AJAX(Asynchronous Javascript And XML),即AJAX = 异步JavaScript + XML.AJAX是一种用于创建快速动态网页的技术. AJAX两大特 ...
- Wasserstein距离 和 Lipschitz连续
EMD(earth mover distance)距离: 在计算机科学与技术中,地球移动距离(EMD)是一种在D区域两个概率分布距离的度量,就是被熟知的Wasserstein度量标准.不正式的说,如果 ...
- C++如何实现DNS域名解析<转>
C++如何实现DNS域名解析 这片文章介绍了C++如何实现DNS域名解析,还有对相关技术的介绍,代码很详细,需要的朋友可以参考下 一.概述 现在来搞定DNS域名解析,其实这是前面一篇文章C++实现 ...
- 规则引擎以及blaze 规则库的集成初探之二——JSR94 的规则引擎API和实现
http://jefferson.iteye.com/blog/67839 规则引擎以及blaze 规则库的集成初探之二——JSR94 的规则引擎API和实现
- Python与Go快速排序
#!/usr/bin/env python # -*- coding: utf-8 -*- # 快速排序 # 时间复杂度 O(n lgn)-- O(n^2) def quick_sort(array) ...
- AABB和平面的相交性检测
[AABB和平面的相交性检测]
- awk编程基础
一.awk介绍 awk(名字来源于三个创始人姓氏首字母)是linux系统下文本编辑工具,是一门编程语言,有自己的基本语法和流程控制.函数.awk简单高效. 二.awk的运行方法 例子:使用冒号:分 ...