转自 http://myiteyeverywell-163-com.iteye.com/blog/1471752
我们经常会将一个比较复杂的目录树存储到一个表中。或者将一些部门存储到一个表中,而这些部门互相有隶属关系。这个时候你就会用到connect by prior start with。
connect by 是结构化查询中用到的,其基本语法是:
select ... from tablename start with 条件1
connect by prior 条件2
where 条件3;
例:
select * from table
start with org_id = 'HBHqfWGWPy'
connect by prior org_id = parent_id;
简单说来是将一个树状结构存储在一张表里,比如一个表中存在两个字段:
org_id,parent_id那么通过表示每一条记录的parent是谁,就可以形成一个树状结构。
用上述语法的查询可以取得这棵树的所有记录。
其中:
条件1 是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树。
条件2 是连接条件,其中用PRIOR表示上一条记录,比如 CONNECT BY PRIOR org_id = parent_id就是说上一条记录的org_id 是本条记录的parent_id,即本记录的父亲是上一条记录。
条件3 是过滤条件,用于对返回的所有记录进行过滤。
例如:
没有加中start with ... connect by prior ...的查询结果:
select t.dim_id, t.pid, level
from pmcode.pmcode_fj_tree_rl t
where t.dim_id in (select b.dim_id
from pmcode.PMCODE_KPI_DIM_OD b
where b.kpi_id = 'KC0011')
结果:
DIM_ID PID LEVEL
---------------------
1024 5003 0
1070 0 0
5003 1070 0
5006 0 0
------------------------------------------------------------------------------------
增加start with ... connect by prior ...以后的结果:
select t.dim_id, t.pid, level
from pmcode.pmcode_fj_tree_rl t
where t.dim_id in (select b.dim_id
from pmcode.PMCODE_KPI_DIM_OD b
where b.kpi_id = 'KC0011')
start with t.dim_id = '1070' ----表示从dim_id = '1070'开始(也就是说1070为根节点)
connect by prior t.dim_id = t.pid; ----表示上条记录的dim_id等于本条记录的pid
结果:
DIM_ID PID LEVEL
---------------------
1070 0 1
5003 1070 2
1024 5003 3
分享到:
相关推荐
通过本文,我们详细介绍了Oracle数据库中 `START WITH` 和 `CONNECT BY` 的使用方法以及应用场景。这两个关键字对于处理具有层级结构的数据非常有用。此外,我们还讨论了如何利用 `LEVEL` 关键字来显示节点所在的...
### Oracle中的START WITH CONNECT BY PRIOR 用法详解 #### 一、概念介绍 在Oracle数据库中,`START WITH` 和 `CONNECT BY PRIOR` 是两个非常强大的特性,主要用于处理具有层级结构的数据。这两个特性可以帮助我们...
`START WITH...CONNECT BY PRIOR`是Oracle SQL中的一个特性,用于处理具有层级关系的数据。这个子句允许我们遍历和查询具有父子关系的数据,例如部门和其下属子部门,或者员工和他们的上级经理。 1. **START WITH...
Oracle 连接查询的使用方法 Oracle 连接查询是指使用 START WITH 和 CONNECT BY 语句来实现递归查询的方法,这种方法可以生成树形结构的数据。在 Oracle 中,START WITH 语句用于指定递归查询的开始记录,而 ...
- 通过 PowerShell 自动化 SQL Server 常见管理任务的方法。 - 使用 PowerShell 脚本简化数据库备份、恢复和监控等操作。 4. **提高生产力的策略** - 作为 DBA、开发者或 IT 专业人士如何通过 PowerShell 提高...
如果不需要特定的起点,可以使用 `START WITH 1=1`,这将默认从表中的所有记录开始。 ### 2. `CONNECT BY` 子句 `CONNECT BY` 子句是递归查询的核心,它定义了如何从一个层级移动到下一个层级。这个子句需要包含 `...
`START WITH CONNECT BY PRIOR`用法详解 **基本语法**: ```sql SELECT * FROM table_name START WITH condition CONNECT BY PRIOR child_column = parent_column; ``` 其中: - `START WITH`: 指定查询的起始条件...
本文将深入探讨如何通过递归查询来解决这类问题,并着重讲解使用`WITH`语句来实现递归查询的方法,适用于多种数据库系统,如MySQL、PostgreSQL、SQL Server等。 一、理解递归查询 递归查询是一种在数据库中遍历层级...
[ WHERE condition ][ [ START WITH condition ] CONNECT BY condition [ ORDER SIBLINGS BY expression ] ] ``` 其中,`START WITH`子句用于指定查询的起始节点,`CONNECT BY`子句用于指定查询的递归条件。 ...
- **搜索对象**:本书提供了如何使用 PowerShell 来搜索 SQL Server 数据库中的对象的方法。 - **步骤**:加载 SMO 组件;使用 SMO 的 `Database` 类来枚举数据库中的表、视图和其他对象。 - **原理**:通过 SMO ...
学习 SQL 常用方法 SQL 是一种广泛使用的数据库语言,用于管理关系数据库管理系统。下面是学习 SQL 常用方法的知识点总结: ...这些知识点总结了 SQL 的基本使用方法和 Oracle 数据库管理系统的常用技巧。
根据提供的文件信息,我们可以深入探讨Oracle数据库中的...通过以上的详细介绍,我们已经了解了在Oracle数据库中如何创建序列、使用各种约束以及如何解锁用户的基本方法。这些技能对于维护和管理Oracle数据库至关重要。
使用`START WITH ... CONNECT BY PRIOR`语句可以从根节点开始遍历整个树形结构。例如,从编号为7839的员工开始查询: ```sql SELECT empno, mgr, ename, job FROM emp START WITH empno = 7839 CONNECT BY PRIOR ...
Python字符串处理是编程中常见的任务,其中`startswith()`和`endswith()`方法是两个非常实用的工具,它们分别用于检查字符串是否以特定的子字符串开头或结尾。在这篇文章中,我们将深入探讨这两个方法的原理、使用...
### SQL 8.0.11 使用方法详解 #### 一、概述 本文将详细介绍如何安装与配置 MySQL 8.0.11 版本,并引导用户完成基本操作流程。MySQL 8.0.11 是一款功能强大的数据库管理系统,适用于多种操作系统环境,包括 ...
本文将深入探讨CTE的基本概念、应用场景及其在Oracle数据库中的具体使用方法。 #### 一、CTE基本概念 CTE是一种定义临时结果集的方法,这些结果集可以在同一个查询中多次引用。它并不是真正意义上的物理表,而是在...
本文将详细介绍如何进行SQL语句的分析,包括但不限于SQL执行计划的查看、SQL性能调优的方法以及使用Oracle提供的工具来进行SQL语句分析。 #### 一、理解SQL执行计划的重要性 SQL执行计划是数据库引擎为了执行SQL...
使用SQL 来生成SQL 语句的目的351 几个SQL*PLUS 命令352 SET ECHO ON/OFF353 SET FEEDBACK ON/OFF353 SET HEADING ON/OFF 353 SPOOL FILENAME/OFF353 START FILENAME354 ED FILENAME354 计算所有的表中的行数354 为...
ABAP是一种专为SAP系统设计的编程语言,而在ABAP中处理字符串时,SQL Functions提供了许多方便的方法。本文将对ABAP SQL Functions for Strings进行详细的语法总结。 首先,我们来讨论一下如何在ABAP SQL中跨Client...
一种常见方法是使用递归查询或者自连接,找出从起点到终点的所有可能路径,并根据换乘次数、总耗时等因素筛选出最佳路线。 以下是一段简单的SQL示例,展示如何找到从A站到B站的最短路径(假设我们已经有了线路表和...