Oracle 中的树查询和 connect by

  • Oracle 中的树查询和 connect by 使用 connect by 和 start with 来建立类似于树的报表并不难,只要遵循以下基本原则即可: 使用 connect by 时各子句的顺序应为: select from where start with connect by order by
  • prior 使报表的顺序为从根到叶(如果 prior 列是父辈)或从叶到根(如果 prior 列是后代)。
  • where 子句可以从树中排除个体,但不排除它们的子孙(或者祖先,如果 prior 列是后代)。
  • connect by 中的条件(尤其是不等于)消除个体和它所有的子孙(或祖先,依赖于怎样跟踪树)。
  • connect by 不能与 where 子句中的表连接在一起使用。

下面是几个例子

1. 从根到叶遍历 SELECT n_parendid, n_name, (LEVEL - 1), n_id FROM navigation WHERE n_parendid IS NOT NULL START WITH n_id = 0 CONNECT BY n_parendid = PRIOR n_id; 2. 从叶到根遍历 SELECT n_parendid, n_name, (LEVEL - 1), n_id FROM navigation WHERE n_parendid IS NOT NULL START WITH n_id = 300 CONNECT BY n_id = PRIOR n_parendid; 3. 排除个体,但不排除它们的子孙 SELECT n_parendid, n_name, (LEVEL - 1), n_id FROM navigation WHERE n_parendid IS NOT NULL AND n_id != 2 START WITH n_id = 0 CONNECT BY n_parendid = PRIOR n_id; 4. 消除个体和它所有的子孙 SELECT n_parendid, n_name, (LEVEL - 1), n_id FROM navigation WHERE n_parendid IS NOT NULL START WITH n_id = 0 CONNECT BY n_parendid = PRIOR n_id AND n_id != 2; 5. 改变显示顺序 SELECT n_parendid, n_name, (LEVEL - 1), n_id FROM navigation WHERE n_parendid IS NOT NULL START WITH n_id = 0 CONNECT BY n_parendid = PRIOR n_id ORDER BY n_viewnum DESC;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我的博客

Python操作MySQL数据库

数据库python-mysql安装参考:http://blog.phpfs.com/archives/2343.html # -*- coding: UTF-8...

3449
来自专栏我的博客

aapt获取apk信息存储mysql

表结构: CREATE TABLE IF NOT EXISTS `apk_info` ( `id` bigint(20) unsigned NOT NULL...

2946
来自专栏杨建荣的学习笔记

关于pl/sql中的绑定变量(r3笔记第73天)

在看关于shared pool的文档时,必定会提到绑定变量,也能够通过几个简单的例子对绑定变量带来影响有深刻的认识,但是在工作中,可能有时候我们就忘了绑定变量的...

2514
来自专栏SpringBoot

mybatis 批量更新问题

1271
来自专栏拂晓风起

[C#]log4net写SQLServer数据库日志的配置方法

1424
来自专栏杨建荣的学习笔记

浅谈exp/imp(上) (r5笔记第81天)

作为DBA,经常需要在不同数据库环境间做数据的导入导出,exp/imp就是这样的轻便快捷的客户端工具,可以很方便的在不同数据库之间转移数据对象,即使数据库位于不...

2698
来自专栏james大数据架构

SQL SERVER 内存分配及常见内存问题 DMV查询

内存动态管理视图(DMV):   从sys.dm_os_memory_clerks开始。 SELECT  [type] ,   SUM(virtual_mem...

18910
来自专栏PingCAP的专栏

TiDB 源码阅读系列文章(十六)INSERT 语句详解

在之前的一篇文章 《TiDB 源码阅读系列文章(四)INSERT 语句概览》 中,我们已经介绍了 INSERT 语句的大体流程。为什么需要为 INSERT 单独...

923
来自专栏数据和云

走在专家的路上,每天一条SQL优化(2)

? 每天坚持进步一点点,让优秀成为一种习惯。 SQL文本如下: INSERT INTO BPZONE.EI_ADDITION (EID,ROOTPIID...

2749
来自专栏跟着阿笨一起玩NET

SQL语句使用总结(二)

391

扫码关注云+社区