RPL 作为一个具有以下三列的虚拟表:
表结构 : PID、ID 和 name。
WITH 子句内的第一个 SELECT 语句是初始化表。它只执行一次。它的结果形成虚拟表的初始内容以作为递归的种子。在上面的示例中,种子是 PID 为 8 的一行或多行。
第二个 SELECT 语句执行多次。将种子作为输入(JOIN 中的辅助表)传递给第二个 SELECT 语句以产生下一个行集合。将 JOIN 的结果添加(UNION ALL)到虚拟表的当前内容中,并放回到其中以形成用于下一次传递的输入。只要有行产生,这个过程就会继续。
========
代码:
WITH RPL (PID, ID, name) AS
(
SELECT ROOT.PID, ROOT.ID, ROOT.Name
FROM regr ROOT
WHERE ROOT.PID = 8
UNION ALL
SELECT CHILD.PID, CHILD.ID, CHILD.Name
FROM RPL PARENT, regr CHILD
WHERE PARENT.ID = CHILD.PID
)
SELECT DISTINCT PID, ID, Name
FROM RPL
ORDER BY PID, ID, Name
虚拟表上最后的 SELECT 允许我们选择递归查询所产生的所有行或仅部分行
分享到:
相关推荐
本文将深入探讨这两个数据库系统中如何使用递归查询语句来操作树形结构。 首先,让我们理解什么是树形结构。在数据存储中,树形结构是一种层次化的数据模型,它由节点(或称为记录)组成,每个节点可以有零个或多...
以下是对DB2递归SQL的详细解释: 1. **递归查询的基本结构** - **初始查询**:这是CTE中对基础表进行查询的部分,不引用CTE本身,用于获取递归的起点。 - **递归查询**:在FROM子句中引用CTE,形成递归。递归查询...
在DB2中,循环递归查询主要通过使用Common Table Expressions(CTEs,公共表表达式)来实现。CTE是一种临时的结果集,它可以在同一个查询语句中被多次引用。对于循环递归查询而言,CTE允许用户定义一个递归结构,...
通过以上示例,我们可以看到虽然 Oracle 和 DB2 在处理递归查询时采用了不同的方法,但通过适当的转换和调整,可以在 DB2 中实现与 Oracle 类似的功能。对于从 Oracle 迁移到 DB2 的应用而言,掌握这两种不同的递归...
【DB2公共表表达式(WITH语句使用)】 公共表表达式(Common Table Expression,简称CTE)在DB2数据库系统中是一个非常强大的工具,主要用于定义临时的、只在查询过程中存在的表。WITH语句使得复杂的查询变得更加...
与其他数据库系统(如DB2、Firebird、Microsoft SQL Server、PostgreSQL)相比,虽然Oracle较晚引入递归WITH子查询,但它仍然是一个强大的补充,特别适用于处理需要递归操作的数据。理解并掌握这一特性,对于优化...
在MySQL中,可以通过递归查询或者使用自定义函数来实现类似的功能。 ##### 5.1. 根据传入ID查询所有父节点的ID ```sql SELECT * FROM treenodes WHERE FIND_IN_SET(id, F_GET_TREE_PARENT_LIST('treenodes', '15'));...
- **Connect by**:在Oracle中用于递归查询的`CONNECT BY`语句,在DB2中需要使用复杂的`WITH`子句结合`UNION ALL`来实现类似功能。 - **Left/Right Join**:DB2不支持Oracle中的`+`符号来表示左连接或右连接,而需...
**注意:** Oracle提供了`CONNECT BY`语法来实现层次查询,而DB2则通过递归公共表表达式(CTE)来实现。 #### 九、打印输出信息 **Oracle:** ```sql DBMS_OUTPUT.PUT_LINE('Hello World'); ``` **DB2:** ```sql ...
例如,DB2支持`WITH`子句的递归查询,而Oracle则有`CONNECT BY`语法来实现相同功能。开发者需要对比两者的语法差异,并对SQL脚本进行修改。 2. **数据库对象迁移**: - 表、视图、存储过程、触发器、索引等数据库...
- **44** - **WITH CHECK OPTION违例**:WITH CHECK OPTION使用不当。 - **46** - **Java DDL**:Java DDL执行过程中出现问题。 - **51** - **无效应用程序状态**:应用程序状态不符合规定。 - **53** - **无效操作...
在DB2数据库管理系统的使用过程中,遇到错误是在所难免的。为了帮助开发者和DB2用户更好地理解并解决这些错误,本文将详细解析DB2中的错误代码——SQLSTATE消息。SQLSTATE是一组五字符的代码,用于描述特定SQL操作的...
- **Oracle**: 支持递归WITH语法,增加了PIVOT和UNPIVOT操作符;新增函数如LISTAGG、NTH_VALUE等。 - **PostgreSQL**: 支持递归WITH语法,增加了窗口函数的支持。 - **DB2**: 提供与Oracle兼容的语法和数据类型。 - ...
在使用DB2的过程中,可能会遇到各种错误代码,这些错误代码通常以`SQLSTATE`的形式出现,用于表示SQL语句执行的结果状态。本文将根据给定的内容详细介绍DB2中的SQLSTATE消息及其含义。 #### SQLSTATE分类 SQLSTATE...
IBM DB2 是一款广泛使用的数据库管理系统,在实际的应用场景中,难免会遇到各种各的各种错误。为了更好地理解和解决这些问题,本文将详细解析 DB2 中的 SQLSTATE 消息异常,以及它们所对应的错误代码和含义。 #### ...
例如,使用`WITH RECURSIVE`语句(在PostgreSQL、MySQL 8.0+、SQL Server等支持)可以创建一个递归查询,从根节点开始,逐步找出所有子节点。 2. **层次查询**: 层次查询通常用于展示具有层级关系的数据,如组织...