数据库库设计:树结构的数据读取详解数据库
2023-06-13 09:20:20 时间
树形结构在实际中应用很多,但在数据库中一般也是设计为表格,如何读取,子孙节点,或者是祖先节点?
在Oracle中使用start with connect by prior
select * from tablename start with cond1
connect by cond2
where cond3;
start with 子句:遍历起始条件,有个小技巧,如果要查父结点,这里可以用子结点的列,反之亦然。
connect by 子句:连接条件。关键词prior,prior跟父节点列parentid放在一起,就是往父结点方向遍历;prior跟子结点列subid放在一起,则往叶子结点方向遍历,
parentid、subid两列谁放在“=”前都无所谓,关键是prior跟谁在一起。
查找指定节点的所有祖先节点
select * from tablename start with id=76 connect by prior parentid=id
查找指定节点的所有子孙节点
select * from tablename start with id=76 connect by prior id=parentid
在SQL Server 中使用CTE递归查询
CTE的语法:
WITH CTE名称(字段列表)
AS
(
查询语句
)
例如:
WITH lmenu(name,senior)
as
(
SELECT name,senior from menu
)
查找指定节点的所有子孙节点
WITH lmenu(name,id) as ( /*初始查询*/ SELECT name,id FROM tablename WHERE id=76 UNION ALL /*递归*/ SELECT A.NAME,A.id FROM tablename A,lmenu b /*递归条件*/ where a.id = b.parentid /*递归完成后返回数据*/ SELECT * from lmenu
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/6689.html
oracle相关文章
- sql中的insert语句怎么写?怎么向数据库中插入数据?
- Spring Batch输出文本数据 XML数据 JSON数据 数据库
- TP5 自动过滤非数据库字段的数据
- Postgresql删除数据库表中重复数据的几种方法详解
- mysql导入数据load data infile用法整理详解数据库
- Oracle中复制表结构和表数据详解数据库
- Oracle插入timestamp类型数据详解数据库
- Mysql中的数据分组和子查询详解数据库
- java如何实时获取数据库新增数据详解数据库
- Oracle查询前几条数据的方法详解数据库
- MySql在生产环境中是用mysqldump还是xtrabackup备份和恢复数据详解数据库
- MySQL删除数据后磁盘空间的释放情况详解数据库
- insert into values插入多条数据详解数据库
- navicat常用快捷键和过滤查询数据详解数据库
- 文档数据库 OrientDB v2.2.18 发布详解大数据
- BLOB字段MySQL中使用Text BLOB字段存储数据(mysql数据库text)
- MySQL 数据库数据增长如何应对?(mysql数据增长)
- MySQL数据库修改实践一步步到达目标(c mysql数据修改)
- Oracle数据库插入操作详解(c 插入数据oracle)
- 数据使用CMD命令备份Oracle数据库(cmd oracle备份)
- IDC无缝同步Oracle数据库,完美实现数据一致性(idc同步oracle)
- 数据库Redis存储非关系型数据的解决方案(redis 非关系型)
- Oracle超大数据库性能优化实践(oracle上亿数据优化)
- 用Redis加快读取数据库的效率(redis读取数据库数据)
- 红色的Redis是否能够胜任数据储存任务(redis能做数据库么)
- 数据Oracle数据库一个月的报表汇总(oracle一个月的报表)