上一篇中讲解了ORACLE中的递归查询,下面我们看一下DB2中如何使用递归查询:

同样的我们先新建一个表来存储以上信息,并插入测试数据:

--建表
create table FAMILY
(
person_id INTEGER,
name VARCHAR(10),
parent_id INTEGER
);
--插入测试数据
insert into FAMILY (PERSON_ID, NAME, PARENT_ID) values (1, 'Apple', 2); insert into FAMILY (PERSON_ID, NAME, PARENT_ID) values (2, 'Zoe', 4); insert into FAMILY (PERSON_ID, NAME, PARENT_ID) values (3, 'Tom', 4); insert into FAMILY (PERSON_ID, NAME, PARENT_ID) values (4, 'John', 7); insert into FAMILY (PERSON_ID, NAME, PARENT_ID) values (5, 'Peter', 6); insert into FAMILY (PERSON_ID, NAME, PARENT_ID) values (6, 'Robert', 10); insert into FAMILY (PERSON_ID, NAME, PARENT_ID) values (7, 'Mary', null); insert into FAMILY (PERSON_ID, NAME, PARENT_ID) values (8, 'Jenny', 7); insert into FAMILY (PERSON_ID, NAME, PARENT_ID) values (9, 'Sam', 10); insert into FAMILY (PERSON_ID, NAME, PARENT_ID) values (10, 'Li Lei', null);

在DB2中使用with字句实现递归查询:

WITH temp (person_id, name, parent_id, LEVEL)
AS (SELECT person_id,
name,
parent_id,
0
FROM FAMILY
WHERE person_id = '' --找寻person_id=1的人的祖先
UNION ALL
SELECT SUPER.person_id,
SUPER.name,
SUPER.parent_id,
CHILD.LEVEL + 1
FROM FAMILY SUPER, temp CHILD
WHERE SUPER.person_id = CHILD.parent_id)
SELECT * FROM temp

得到,如图我们可以得到Apple的父亲是Zoe,Zoe父亲是John,看level依次类推,Mary是他们老祖宗,

当然,我们除了可以得到某个节点的父节点,

WITH temp (person_id, name, parent_id, LEVEL)
AS (SELECT person_id,
name,
parent_id,
1
FROM FAMILY
WHERE person_id = '' --找寻person_id=4的人的祖先
UNION ALL
SELECT SUPER.person_id,
SUPER.name,
SUPER.parent_id,
CHILD.LEVEL + 1
FROM FAMILY SUPER, temp CHILD
WHERE SUPER.person_id = CHILD.parent_id)
SELECT * FROM temp

也可以得到某个节点的子节点:

WITH temp (person_id, name, parent_id, LEVEL)
AS (SELECT person_id,
name,
parent_id,
1
FROM FAMILY
WHERE person_id = '' --找寻person_id=4的人的传人
UNION ALL
SELECT CHILD.person_id,
CHILD.name,
CHILD.parent_id,
SUPER.LEVEL + 1
FROM FAMILY CHILD, temp SUPER
WHERE SUPER.person_id = CHILD.parent_id)
SELECT * FROM temp

得到,其中Tom跟Zoe都是John的子节点。

DB2 递归查询的更多相关文章

  1. DB2递归查询

    斐波纳契数列,又称黄金分割数列,指的是这样一个数列:1.1.2.3.5.8.13.21.……在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n&g ...

  2. db2 with用法

    最近在研究db2 递归查询时想到了with,一直以为with只是用来查询递归,但是实际with功能强大,还有更加强大的功能,偶然读到一位大神的文章,对with做了很详细的解读,特贴出来供大家学习研究 ...

  3. 你搞懂 ORACLE、 SQLSERVER、MYSQL与DB2的区别了吗

    ORACLE. SQLSERVER.MYSQL与DB2的区别--平台性:    Oracle.MYSQL与DB2可在所有主流平台上运行:    SQL Server只能在Windows下运行: --安 ...

  4. Oracle 递归查询

    现实中我们经常需要用到一些递归查询,下面我们来介绍下ORACLE中递归查询的使用. 首先我们先新建一个表来存储以上信息 create table FAMILY ( person_id INTEGER, ...

  5. DB2 公共表表达式(WITH语句的使用)

    ----start 说起WITH 语句,除了那些第一次听说WITH语句的人,大部分人都觉得它是用来做递归查询的.其实那只是它的一个用途而已,它的本名正如我们标题写的那样,叫做:公共表表达式(Commo ...

  6. db2构建临时结果集

    一 values  ('1',2,3)   为一行   ‘1’   2    3   行数据类型可以不同  values  ('1',2,3),('f',5,6) 为两行 (values  1,2,3 ...

  7. DB2重启数据库实例

    DB2重启数据库实例时,有时停止实例会失败,此时需要先确认没有应用链接数据库,然后再关闭数据库实例,并重新启动. 1.查看是否有活动的链接 命令:db2 list applications for d ...

  8. MSSQLServer中组织或分类表的设计及其递归查询

    开篇:项目中用到上下级从属关系的太多太多了,如:组织.分类.行政区域,这里不再一一介绍,遇到这种的如何去进行数据库表的设计及其应用的,个人对往期项目中所涉及到的进行了一些总结. 数据库表设计:表字段一 ...

  9. C# 连接DB2字符串 Oracle免安装客户端连接字符串

    以下是DB2连接数据库 1)使用IBM.Data.DB2链接DB2数据库 2)必须安装DB2客户端,IBM.Data.DB2在安装的BIN里可以找到 3)注意一下DB2客户端版本问题,我的就是WIN7 ...

随机推荐

  1. bzoj2242: [SDOI2011]计算器 && BSGS 算法

    BSGS算法 给定y.z.p,计算满足yx mod p=z的最小非负整数x.p为质数(没法写数学公式,以下内容用心去感受吧) 设 x = i*m + j. 则 y^(j)≡z∗y^(-i*m)) (m ...

  2. IIS大数据请求设置方法

    大并发大数据量请求一般会分为几种情况: 1.大量的用户同时对系统的不同功能页面进行查找,更新操作 2.大量的用户同时对系统的同一个页面,同一个表的大数据量进行查询操作 3.大量的用户同时对系统的同一个 ...

  3. 如果你只会JQuery的插件式开发, 那么你可以进来看看?

    对于JQuery的学习,已经有3年多的时间了,直到去年与我的组长一起做项目,看到他写的JS,确实特别漂亮,有时甚至还看不太懂, 我才发现其实我不太会JQuery.所以我有时间就会去看看他写的JS代码, ...

  4. linux 服务自动调用

    php服务地址: http://192.168.2.117/web/index.php/buy/auctionselect 编写脚本service.sh,内容: #! /bin/sh crul htt ...

  5. error LNK2019: 无法解析的外部符号 __imp___CrtDbgReportW

    error LNK2005 and error LNK2019 error LNK2019: unresolved external symbol __imp___CrtDbgReportW refe ...

  6. Unit testing Cmockery 简单使用

    /********************************************************************** * Unit testing Cmockery 简单使用 ...

  7. ti processor sdk linux am335x evm Makefile hacking

    # # ti processor sdk linux am335x evm Makefile hacking # 说明: # 本文主要对TI的sdk中的Makefile脚本进行解读,是为了了解其工作机 ...

  8. Java [Leetcode 205]Isomorphic Strings

    题目描述: Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the ...

  9. unsigned 和 signed

    http://www.cnblogs.com/stonehat/archive/2011/10/14/2212141.html http://m.blog.csdn.net/blog/u0100862 ...

  10. Oracle 课程四之索引

    课程目标 完成本课程的学习后,您应该能够: 理解b*tree索引的结构与特征 了解聚簇因子的产生原因 理解分区索引与全局索引的区别及场景 掌握组合索引的高效设计 位图索引的适用场景 全文索引的适用场景 ...