Oracle :
  start with… connect by 的用法。语法:select * from table [where 条件1] connect by[条件2] start with[条件3]。
  connect by 和 start with的位置并无先后顺序。

select * from sys_organ_info where organ_id not in(4,6) start with organ_id = 3 connect by organ_id = prior organ_pid

  pid为父类。prior英文意思是在前的,居先的。所以,prior放在哪一边的话,表示哪一边为父类。故,这句sql是从树自下而上搜索。如果connect by的条件为 prior organ_id = organ_pid的话,可以理解成:之前那条数据的organ_id是当前这条数据的organ_pid, 就是从树自上而下钻取搜索,即:查询出organ_id的所有子类、孙类、重孙类等。
PG:

WITH RECURSIVE rcs as (
SELECT a.* FROM share_dev_type a
WHERE p_id = 1
UNION ALL
SELECT b.* FROM share_dev_type b, rcs
WHERE b.p_id = rcs.id
)
SELECT * FROM rcs

  用递归的方式,把一个表分成两份a和b,  查p_id = 1 的所有数据,此句表示 a 中的p_id=1,递归的条件即是 b的p_id即是a的id。 故,查询的是p_id = 1 的子孙数据。结果如图:

如果查父类:

    WITH RECURSIVE rcs as (
SELECT a.* FROM share_dev_type a
WHERE id = 126
UNION ALL
SELECT b.* FROM share_dev_type b, rcs
WHERE b.id = rcs.p_id
)
SELECT * FROM rcs

此句表示 a 中的id = 126,递归的条件即是 b的id即是a的p_id。 故,查询的是id = 126 的 父类数据。结果:

关系型数据库的树形结构查询(Oracle、Postgres)的更多相关文章

  1. 使用Oracle数据库实现树形结构表的子-父级迭代(递归)查询和删除,通过级联菜单简单举例

    前言: 我们在开发中,常常遇到单表的子-父id级联的表结构,在树形的深度不确定的情况下,一次查询出某个树形结构下的所有具有子-父级关系的数据变得十分困难. 这时,我们使用oracle提供的CONNEC ...

  2. 使用postgre数据库实现树形结构表的子-父级迭代查询,通过级联菜单简单举例

    前言:开发常用的关系型数据库MySQL,mssql,postgre,Oracle,简单的增删改查的SQL语句都与标准SQL兼容,这个不用讲,那么对于迭代查询(不严格的叫法:递归查询)每种数据库都不一样 ...

  3. 使用Oracle数据库实现树形结构表的子-父级递归查询和删除,通过级联菜单简单举例

    前言: 我们在开发中,常常遇到单表的子-父id级联的表结构,在树形的深度不确定的情况下,一次查询出某个树形结构下的所有具有子-父级关系的数据变得十分困难. 这时,我们使用oracle提供的CONNEC ...

  4. MySql/Oracle树形结构查询

    Oracle树形结构递归查询 在Oracle中,对于树形查询可以使用start with ... connect by select * from treeTable start with id='1 ...

  5. Oracle树形结构查询(递归)

    引用:https://blog.csdn.net/u012615705/article/details/78321022  文章转自上述地址,内部有稍许改动,如有需要请查看原文. oracle树状结构 ...

  6. Delphi中accesss实现树形结构查询系统(一次性生成比较方便)

    主要是要读取数据库的信息,而delphi界面是一个树形结构. 例如有一个Ascess数据库:示例.MDB,内有一张表:“国家”,表的内容如下: 编号        名称  01             ...

  7. Oracle恢复删除数据 && connect by 树形结构查询

    1.一个表中根据以父子级别关系查询显示出来(如图) select t.* from department t CONNECT BY PRIOR t.depid=t.supdepid ; --这样也可以 ...

  8. Oracle树形结构查询之prior的理解

    --1 建表 create table 宇宙( 行星等级 number ,行星名称 varchar2(50) ,上级行星等级 number); --2 数据准备 insert into 宇宙 (行星等 ...

  9. MySQL递归查询所有子节点,树形结构查询

    --表结构 CREATE TABLE `address` ( `id` int(11) NOT NULL AUTO_INCREMENT, `code_value` varchar(32) DEFAUL ...

随机推荐

  1. 使用HTML CSS制作简易三角形和旗帜

    HTML:     <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  2. .tar.gz文件和.tar.xz文件的解压和压缩

    1,.tar文件 tar  -cvf 压缩 tar  -xvf 解压 例如: tar -xvf mysql-8.0.16-linux-glibc2.12-x86_64.tar 2,.xz文件 xz  ...

  3. SuperMemo method

    原文:https://www.supermemo.com/en/archives1990-2015/english/ol/sm2 别人的研究:http://wdxtub.lofter.com/post ...

  4. JAVA静态方法是否可以被继承?

    结论:java中静态属性和静态方法可以被继承,但是没有被重写(overwrite)而是被隐藏. 原因: 1). 静态方法和属性是属于类的,调用的时候直接通过类名.方法名完成对,不需要继承机制及可以调用 ...

  5. IT基础架构

  6. python学习之文件读写,序列化(json,pickle,shelve)

    python基础 文件读写 凡是读写文件,所有格式类型都是字符串形式传输 只读模式(默认) r  f=open('a.txt','r')#文件不存在会报错 print(f.read())#获取到文件所 ...

  7. day 03 turtle 画鹅

    turtle 画鹅 import turtle t=turtle turtle.speed(10) t. setup(800,600) #画头 turtle.penup() turtle.goto(0 ...

  8. Java : 对象不再使用时,为什么要赋值为 null ?

    今天遇到一个比较有意思的问题,对象不再使用时,为什么要赋值为 null ? 在这里我看到一篇文章说的不错,下面是网址,有兴趣的IT友可以看看. https://mp.weixin.qq.com/s/Z ...

  9. 0003SpringBoot整合SpringDataJPA

    SpringBoot整合SpringDataJpa步骤如下: 1.添加data-jpa起步依赖(pom.xml) 2.添加数据库驱动坐标.添加Junit起步依赖(pom.xml) 3.添加数据库连接信 ...

  10. 属性 Attribute

    一.创建属性 [AttributeUsage(AttributeTargets.Class | AttributeTargets.Constructor, AllowMultiple = true, ...