ORACLE:根据父id查询所有子孙数据,或者根据子id查询所有父数据(start with connect by prior)

简介: 一、需求:我们在开发中经常遇到一种数据库表的设计:一个表中包含父子信息数据,也就是常说的树形数据. —> 最常见的例子就是省市区一体表,就是通过id、pid、level来进行控制,从而一张表来存储数据.我们进行拿数据的时候,不用再连表拿取,直接通过(start with connect by prior)直接便利就会得到数据.

ORACLE:根据父id查询所有子孙数据,或者根据子id查询所有父数据(start with connect by prior)


一、需求:

我们在开发中经常遇到一种数据库表的设计:一个表中包含父子信息数据,也就是常说的树形数据. —> 最常见的例子就是省市区一体表,就是通过id、pid、level来进行控制,从而一张表来存储数据.我们进行拿数据的时候,不用再连表拿取,直接通过(start with connect by prior)直接便利就会得到数据.

二、准备省市区表:

CREATE TABLE REGION (
  "ID" NUMBER NOT NULL,
  "name" VARCHAR2(200 BYTE),
  "PID" NUMBER,
  "level" NUMBER
)
INSERT INTO REGION VALUES ('1', '中国', '0', '0');
INSERT INTO REGION VALUES ('2', '山东省', '1', '1');
INSERT INTO REGION VALUES ('3', '浙江省', '1', '1');
INSERT INTO REGION VALUES ('4', '济南市', '2', '2');
INSERT INTO REGION VALUES ('5', '青岛市', '2', '2');
INSERT INTO REGION VALUES ('6', '历下区', '4', '3');
INSERT INTO REGION VALUES ('7', '市北区', '5', '3');
INSERT INTO REGION VALUES ('8', '黄岛区', '5', '3');
INSERT INTO REGION VALUES ('9', '天桥区', '4', '3');
INSERT INTO REGION VALUES ('10', '杭州市', '3', '2');
INSERT INTO REGION VALUES ('11', '绍兴市', '3', '2');
INSERT INTO REGION VALUES ('12', '西湖区', '3', '3');

三、根据id查询所有的子数据

需求:我输入山东省的id,会把山东省及下面的市区都查询出来

select * from REGION 
start with id = 2
connect by prior id = pid -- prior 右边是子级id,就往子级的方向查询
ORDER BY id;

结果展示

四、根据id查询所有的父数据

需求:我输入黄岛区的id,会把黄岛区及其所在的市省国查询出来

select * from REGION 
start with id = 8
connect by prior pid = id -- prior 右边是父id,就往父级的方向查询
ORDER BY id;

结果展示

五、总结

主要是列举这两种比较常用的写法,有问题留言哦,要是对你有帮助,点个赞把,谢谢大家!!

相关文章
|
Oracle 关系型数据库 Linux
【YashanDB 知识库】通过 dblink 查询 Oracle 数据时报 YAS-07301 异常
客户在使用 YashanDB 通过 yasql 查询 Oracle 数据时,遇到 `YAS-07301 external module timeout` 异常,导致 dblink 功能无法正常使用,影响所有 YashanDB 版本。原因是操作系统资源紧张,无法 fork 新子进程。解决方法包括释放内存、停掉不必要的进程或增大进程数上限。分析发现异常源于 system() 函数调用失败,返回 -1,通常是因为 fork() 失败。未来 YashanDB 将优化日志信息以更好地诊断类似问题。
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle的闪回版本查询
本文介绍了Oracle数据库的闪回版本查询(Flashback Version Query)功能,通过示例详细讲解了其使用方法。闪回版本查询可获取指定时间区间内行的不同版本,利用`versions between`子句实现。文中包含视频讲解,并通过创建测试表、插入数据及执行查询等步骤,演示如何获取历史版本信息和伪列详情,帮助用户深入了解该功能的实际应用。
362 13
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的闪回事务查询
Oracle数据库的闪回事务查询(Flashback Transaction Query)是闪回版本查询的扩充,可用于审计或撤销已提交的事务。通过`flashback_transaction_query`视图,可生成还原特定事务的SQL语句。本文介绍了其基本概念,并通过实战演示如何使用该功能:从授权、开启UNDO数据增强,到创建测试表和事务,最后利用闪回查询撤销已提交的事务,验证数据恢复效果。附带视频讲解,帮助深入理解。
372 3
|
Oracle 关系型数据库 Linux
【YashanDB知识库】通过dblink查询Oracle数据时报YAS-07301异常
【YashanDB知识库】通过dblink查询Oracle数据时报YAS-07301异常
|
Oracle 关系型数据库 MySQL
【YashanDB知识库】oracle dblink varchar类型查询报错记录
这篇文章主要介绍了 Oracle DBLINK 查询崖山 DB 报错的相关内容,包括 ODBC 安装配置、数据源配置、dblink 环境配置、问题原因分析及规避方法。问题原因是 dblink 连接其他数据库时 varchar 类型转换导致的,还介绍了 long 类型限制、char 等类型区别,规避方法是修改参数 MAX_STRING_SIZE 支持 32K。
|
SQL Oracle 关系型数据库
oracle数据库带或不带数据导入导出操作大全
oracle数据库带或不带数据导入导出操作大全
|
Oracle 关系型数据库 数据库
|
Oracle 关系型数据库 数据库
|
Oracle 关系型数据库 数据库
|
SQL Oracle 关系型数据库

推荐镜像

更多