原料

--创建组织架构表
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. DAG最长路径

    1.DAG最长路径(不记录路径) int dfs1(int s) { )return dis[s]; ; i < G[s].size(); ++i) { int to = G[s][i]; di ...

  2. 双系统(Windows+Ubuntu)重装Ubuntu后,修复引导

    重装Ubuntu后,重启机器,Windows系统消失了.进入BIOS修改启动顺序,Windows系统恢复了,但是,刚装好的Ubuntu没了,一开机,电脑自动进入Windows. 解决办法: 用装系统的 ...

  3. Linux操作系统-基本命令(一)

    熟悉Linux命令基础 Linux系统的终端窗口 字符终端为用户提供了一个标准的命令行接口,在字符终端窗口中,会显示一个Shell提示符,通常为$. 用户可以在提示符后输入带有选项和参数的字符命令,并 ...

  4. Solr Facet 统计查询

    一)概述 Facet是solr的高级搜索功能之一,可以给用户提供更友好的搜索体验.在搜索关键字的同时,能够按照Facet的字段进行分组并统计.例如下图所示,你上淘宝,输入“电脑”进行搜索,就会出现品牌 ...

  5. C#遍历XmlDocument对象所有节点名称、类型、属性(Attribute)

    C#遍历XmlDocument对象所有节点名称.类型.属性(Attribute) 源码下载 代码 static void Main(string[] args) { System.Xml.XmlDoc ...

  6. Linux nohup和&的功效

    nohup和&究竟有啥区别?不少同学进行了回复,但并不是所有同学都理解得全对,今天把自己挖的坑自己填了. 测试代码如下: 是一个输出hello与循环轮数的死循环程序,每输出一行就休眠1秒. 使 ...

  7. strongswan

    StrongSwan is an open source IPsec-based VPN Solution. It supports both the IKEv1 and IKEv2 key exch ...

  8. Spring配置项<context:annotation-config/>解释说明

    转自:https://blog.csdn.net/techbirds_bao/article/details/9241371 在基于主机方式配置Spring的配置文件中,你可能会见到<conte ...

  9. 7.25 10figting!

    TEXT 88 European utilities欧洲公用事业 Power struggles 能源之争(陈继龙编译) Nov 30th 2006 From The Economist print ...

  10. readlink 获取当前进程对应proc/self/exe

    [readlink 获取当前进程对应proc/self/exe] shell中  readlink /proc/self/exe READLINK(2)NAME       readlink - re ...