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 ...
随机推荐
- Python实现进度条总结
先说一下文本系统的控制符:\r: 将光标移动到当前行的首位而不换行:\n: 将光标移动到下一行,并不移动到首位:\r\n: 将光标移动到下一行首位. 环境:root@ubuntu16: ...
- samba性能调优
不知道有多少公司的内部打印及文件服务器是用的Linux,我想肯定不会太多,因为Windows实现起来更方便,更快速,当然,Windows也 是更Danger. 因为Windows有太多不确定性的东西, ...
- Shell 函数库
1.为什么要定义函数库 经常使用的重复代码封装成函数文件 一般不直接执行,而是由其他脚本调用 2.编写一个函数库,该函数库实现以下几个函数. 1.加法函数:add 2.减法函数:reduce 3.乘法 ...
- layui 弹框
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&q ...
- sqlserver job 执行时间
select instance_id,jh.run_date,jh.job_id,jh.step_name, case jh.run_status then 'failed' then 'Succee ...
- UNITY地图寻路及服务器解决方案
多边形寻路算法简单介绍 http://liweizhaolili.lofter.com/post/1cc70144_86a939e UNITY3D MMO服务器寻路 http://www.pathen ...
- 用 AutoHotKey 随时记录所想
别被标题咋呼了,其实很简单,按下快捷键自动打开指定文本文档,自动加上当前时间日期,适合像我这种无聊的人记录生活. ;Alt+X 调出 !X:: ;获取当前日期时间并保存到剪贴板 d = @rhinoc ...
- php通过反射执行某方法
简单记录下通过反射来获取某方法的参数,然后利用php内置函数类执行此方法 一个简单的test类 class test { //2个参数默认值 public function b($name='lemo ...
- Linux Terminator
NAME Terminator - Multiple GNOME terminals in one window SYNOPSIS terminator [options] DESCRIPTION T ...
- python 探测网站目录的GUI程序-乾颐堂
1.pyqt4写的界面 find_ui.py 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 ...