原料

--创建组织架构表
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递归查询的更多相关文章

  1. PostgreSQL=>递归查询

    PostgreSQL=>递归查询 转载请注明源地址:http://www.cnblogs.com/funnyzpc/p/8232073.html 距上次博客更新刚好两周,这两周发生了很多,比如: ...

  2. PostgreSQL递归查询示例

    PostgreSQL提供了WITH语句,允许你构造用于查询的辅助语句.这些语句通常称为公共表表达式或cte.cte类似于只在查询执行期间存在的临时表. 递归查询是指递归CTE的查询.递归查询在很多情况 ...

  3. PostgreSQL递归查询实现树状结构查询

    在Postgresql的使用过程中发现了一个非常有意思的功能,就是对于须要相似于树状结构的结果能够使用递归查询实现.比方说我们经常使用的公司部门这样的数据结构.一般我们设计表结构的时候都是相似以下的S ...

  4. oracle和postgresql 递归查询父子关系记录语法区别

    oracle: 一.数据 db数据字段如下: task_id             task_name         t.parent_task_id       *** ***          ...

  5. PostgreSQL 递归查询 (转)

    数据库中的数据存在父子关系(单继承,每一条记录只有一个父亲).  如果要查询一条记录以及他的所有子记录,或者要查询一条记录以及他的所有父记录.那么递归查询就再合适不过了.可以简化复杂的SQL语句 现在 ...

  6. 对sql作业的总结(PostgreSQL的递归查询)

    已知条件如下: CREATE TABLE appointment ( emp_id integer NOT NULL, jobtitle ) NOT NULL, salary ,) NOT NULL, ...

  7. PostgreSQL中RECURSIVE递归查询使用总结

    RECURSIVE 前言 CTE or WITH 在WITH中使用数据修改语句 WITH使用注意事项 RECURSIVE 递归查询的过程 拆解下执行的过程 1.执行非递归部分 2.执行递归部分,如果是 ...

  8. postgresql 函数&存储过程 ; 递归查询

    函数:http://my.oschina.net/Kenyon/blog/108303 紧接上述,补充一下: 输入/输出参数的函数demo(输入作为变量影响sql结果,输出作为结果返回) create ...

  9. PostgreSQL的递归查询(with recursive) ,替代oracle 的级联查询connect by

    开发有需求,说需要对一张地区表进行递归查询,Postgres中有个 with recursive的查询方式,可以满足递归查询(一般>=2层). 测试如下: create table tb(id ...

随机推荐

  1. 【失败】CentOS 6.5安装VNCserver 并开启远程桌面

    如果你的centos系统压根就没装CDE.Gnome等桌面,那你先执行这条命令,把GUI环境装上,no GUI no VNC yum -y groupinstall 'GNOME Desktop En ...

  2. Spring batch学习 (1)

    Spring Batch 批处理框架 埃森哲和Spring Source研发 主要解决批处理数据的问题,包含并行处理,事务处理机制等.具有健壮性 可扩展,和自带的监控功能,并且支持断点和重发.让程序员 ...

  3. Python-第三方库requests

    Requests 是使用 Apache2 Licensed 许可证的 基于Python开发的HTTP 库,其在Python内置模块的基础上进行了高度的封装,从而使得Pythoner进行网络请求时,变得 ...

  4. Timer控件的使用限制和注意事项

    Timer的Interval 属性当编写 Timer 组件时,需要考虑 Interval 属性的几点限制:1. 如果应用程序或另一个应用程序对系统需求很大(如长循环.大量的计算或驱动程序.网络或端口访 ...

  5. 【329】word 替换文本高级用法

    参考:查找和替换 Word 文档中的文本和其他数据 问题提出:由于在准备某个考试,然后题库中给了正确答案,对于单选题来说,可以直接替换成白色就看不见了,但是当遇到多选题的时候就麻烦了,毕竟 A/B/C ...

  6. 迷你MVVM框架 avalonjs 0.93发布

    这段时间吸取@limodou, @东灵等人的意见,做了以下改进 重构isArrayLike,提高avalon.each的性能,原来avalon.each是依赖于isArrayLike来判定是循环普通对 ...

  7. 5-青蛙的约会(ex_gcd)

    青蛙的约会 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions:122411   Accepted: 25980 Descripti ...

  8. Yii2 windows 安装步骤

    安装 Yii2 高级版应用 基础版可以看官方文档 今天安装了YII2高级版应用 写下步骤 留个记号,以备查询! 在 Windows 中,你首先需要下载并运行 Composer-Setup.exe 查看 ...

  9. JavaScript事件 DOMNodeInserted DOMNodeRemoved

    JavaScript与HTML之间的交互是通过事件实现的.事件,就是文档或浏览器窗口中发生的一些特定交互的瞬间.可以使用侦听器(或处理程序)来预订事件,以便事件发生时执行相应的代码. 13.1 事件流 ...

  10. Golang笔记之变量

    哈哈 package main // 关键字var 声明变量 类型信息放在变量名后 //声明一个int型变量 var v1 int //声明一个string类型 var v2 string //声明多 ...