DB2 递归查询
上一篇中讲解了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 递归查询的更多相关文章
- DB2递归查询
斐波纳契数列,又称黄金分割数列,指的是这样一个数列:1.1.2.3.5.8.13.21.……在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n&g ...
- db2 with用法
最近在研究db2 递归查询时想到了with,一直以为with只是用来查询递归,但是实际with功能强大,还有更加强大的功能,偶然读到一位大神的文章,对with做了很详细的解读,特贴出来供大家学习研究 ...
- 你搞懂 ORACLE、 SQLSERVER、MYSQL与DB2的区别了吗
ORACLE. SQLSERVER.MYSQL与DB2的区别--平台性: Oracle.MYSQL与DB2可在所有主流平台上运行: SQL Server只能在Windows下运行: --安 ...
- Oracle 递归查询
现实中我们经常需要用到一些递归查询,下面我们来介绍下ORACLE中递归查询的使用. 首先我们先新建一个表来存储以上信息 create table FAMILY ( person_id INTEGER, ...
- DB2 公共表表达式(WITH语句的使用)
----start 说起WITH 语句,除了那些第一次听说WITH语句的人,大部分人都觉得它是用来做递归查询的.其实那只是它的一个用途而已,它的本名正如我们标题写的那样,叫做:公共表表达式(Commo ...
- db2构建临时结果集
一 values ('1',2,3) 为一行 ‘1’ 2 3 行数据类型可以不同 values ('1',2,3),('f',5,6) 为两行 (values 1,2,3 ...
- DB2重启数据库实例
DB2重启数据库实例时,有时停止实例会失败,此时需要先确认没有应用链接数据库,然后再关闭数据库实例,并重新启动. 1.查看是否有活动的链接 命令:db2 list applications for d ...
- MSSQLServer中组织或分类表的设计及其递归查询
开篇:项目中用到上下级从属关系的太多太多了,如:组织.分类.行政区域,这里不再一一介绍,遇到这种的如何去进行数据库表的设计及其应用的,个人对往期项目中所涉及到的进行了一些总结. 数据库表设计:表字段一 ...
- C# 连接DB2字符串 Oracle免安装客户端连接字符串
以下是DB2连接数据库 1)使用IBM.Data.DB2链接DB2数据库 2)必须安装DB2客户端,IBM.Data.DB2在安装的BIN里可以找到 3)注意一下DB2客户端版本问题,我的就是WIN7 ...
随机推荐
- Android开发之三种动画
转载:http://www.cnblogs.com/angeldevil/archive/2011/12/02/2271096.html http://www.lightskystreet.com/2 ...
- super.getClass()方法
下面程序的输出结果是多少? importjava.util.Date; public class Test extends Date{ public static void main(String[] ...
- 基于XMPP的即时通信系统的建立(一)— XMPP基础概念
相关背景 IM(Instant Messaging)正在被广泛使用,特别是公司与它们的客户互动连接方案以及互联网与Web2.0相关的应用.为了解决即时通信的标准问题,IETF(互联网工程任务组 The ...
- socket编程---一个简单例子
服务器端代码(单线程): import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamRe ...
- ASP.NET在IE10,IE11中Form表单身份验证失效问题解决方法
已经研究出解决方案. 在web.config中的forms中增加cookieless="UseCookies"属性即可. <authentication mode=&qu ...
- Java知识点:琐碎知识点(2)
49个关键字一览 abstract default if private this boolean do implements protected throw break double import ...
- shiro实现APP、web统一登录认证和权限管理
先说下背景,项目包含一个管理系统(web)和门户网站(web),还有一个手机APP(包括Android和IOS),三个系统共用一个后端,在后端使用shiro进行登录认证和权限控制.好的,那么问题来了w ...
- (转)TCP协议那些事
(上) TCP是一个巨复杂的协议,因为他要解决很多问题,而这些问题又带出了很多子问题和阴暗面.所以学习TCP本身是个比较痛苦的过程,但对于学习的过程却能让人有很多收获.关于TCP这个协议的细节,我还是 ...
- Java单例模式和volatile关键字
单例模式是最简单的设计模式,实现也非常"简单".一直以为我写没有问题,直到被 Coverity 打脸. 1. 暴露问题 前段时间,有段代码被 Coverity 警告了,简化一下代码 ...
- css中position:relative的真正理解
其实话说一直以来也没真正去理解好position:relative的用法的真实意义. 我想很多人实实在在用的多都是position:relative和position:absolute结合起来一起用的 ...