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 ...
随机推荐
- trim合理和谐
今天早上,到公司,噩耗传来.上周的上线的功能出现问题,后台mis中有数据不能保存了. 经过紧张的查找,还是我的问题.有一个查重操作,在查重前,会比对新旧值,新值顺手trim了.旧值直接保存了. 在比较 ...
- php整理(二): 数组
数组: 首先说一下对PHP中的理解,建立一个好的理解模型还是很关键的: 1.PHP中的数组实际上可以理解为键值对,key=>value;而对于key的取值,可以是string/integer;v ...
- ExtJs自学教程(2):从DOM看EXTJS
<二> 从DOM看EXTJS 看标题可能有人会问,为啥好好的例子不看,得从DOM看起呢?答案是目标只为了一个:自运行结果把EXTJS看得更清楚点 首先,要看得靠点工具,带点放大镜什么吧?对 ...
- [HIHO1051]补提交卡(枚举,贪心)
题目链接:http://hihocoder.com/problemset/problem/1051 思路:先排序,然后枚举连续的长度为m的子段,用这个段之后的第一个天数减去这个段之前的第一个天数再-1 ...
- cmd打开git
一旦你的git安装成功,而且在安装是没有选择可以使用cmd黑窗口来打开,那么你再来设置会很麻烦,我表示不会. 今天分享下同事分享给我的一个不错的方法. 这个方法依赖一个 Dos 文件(.bat文件), ...
- poj 1191 棋盘分割(dp + 记忆化搜索)
题目:http://poj.org/problem?id=1191 黑书116页的例题 将方差公式化简之后就是 每一块和的平方 相加/n , 减去平均值的平方. 可以看出来 方差只与 每一块的和的平方 ...
- 宏UT_LIST_ADD_FIRST
/*******************************************************************//** Adds the node as the first ...
- JavaScript闭包示例
在下面的例子中,为什么点击所有的段落p输出都是5,而不是alert出对应的0,1,2,3,4. <html> <head> <meta charset="utf ...
- IIS Web负载均衡的几种方式
Web负载均衡的几种实现方式 摘要:负载均衡(Load Balance)是集群技术(Cluster)的一种应用.负载均衡可以将工作任务分摊到多个处理单元,从而提高并发处理能力.目前最常见的负载均衡应用 ...
- powerScript脚本
一.powerScript的语法 1.0变量的命名及使用 powerscript的标识符(变量名称)必须以字母或下划线开头,其它的字符可以是下划线(_).短横线(-).美元符号($).号码符号(#) ...