楼主: myfriend2010

[精华] 关于db2递归的一个例子

[复制链接]
招聘 : c/c++研发
论坛徽章:
45
技术图书徽章
日期:2014-03-10 14:09:192012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-01-04 11:51:22ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15现任管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
11#
发表于 2008-3-14 19:59 | 只看该作者
等我升了VP有资格拉人的时候一定优先考虑你

使用道具 举报

回复
论坛徽章:
21
在线时间
日期:2007-07-25 04:01:022012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:23马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:09:23
12#
发表于 2008-3-14 20:06 | 只看该作者
This is a book I would think the best book to learn DB2 SQL:

http://mysite.verizon.net/Graeme_Birchall/id1.html

Look for "Recursive SQL"

使用道具 举报

回复
招聘 : Linux运维
论坛徽章:
235
紫蜘蛛
日期:2007-09-26 17:05:46玉兔
日期:2007-09-26 17:05:05现任管理团队成员
日期:2011-05-07 01:45:08玉兔
日期:2006-08-29 20:38:48紫蜘蛛
日期:2007-09-26 17:05:34阿斯顿马丁
日期:2013-11-19 10:38:16奔驰
日期:2013-10-16 09:08:58红旗
日期:2014-01-09 11:57:39路虎
日期:2013-08-13 14:52:35林肯
日期:2015-05-19 13:01:16
13#
 楼主| 发表于 2008-3-14 20:26 | 只看该作者
这个好,

原帖由 askgyliu 于 2008-3-14 20:06 发表
This is a book I would think the best book to learn DB2 SQL:

http://mysite.verizon.net/Graeme_Birchall/id1.html

Look for "Recursive SQL"

使用道具 举报

回复
论坛徽章:
36
奥运纪念徽章
日期:2008-09-04 11:35:05欧洲冠军杯纪念徽章
日期:2009-05-31 09:59:59NBA季后赛纪念徽章
日期:2009-06-16 11:28:172009日食纪念
日期:2009-07-22 09:30:00里昂
日期:2009-11-10 11:25:35热刺
日期:2009-11-30 12:45:132010新春纪念徽章
日期:2010-01-04 08:33:08NBA常规赛纪念章
日期:2010-04-15 14:01:10
14#
发表于 2008-3-19 20:41 | 只看该作者
with t (t1,t2,t3) as (
values
('A1', 1 ,'01'),('A1' ,1, '02'),('A1', 1, '03'),
('A2', 1, '01'),('A2', 2, '01'),('A2', 2 ,'02')
),
t1(t11,t22,t33,t44) as (
select t1,t2,t3,rownumber() over(partition by t1,t2)  from t
),
t3(s1,s2,s3,s4) as(
select t11,t22,cast(t33 as varchar(100)),t44 from t1 where T44 =1
union all
select a.s1,a.s2,cast(a.s3||'-'||b.t33 as varchar(100)),a.s4+1 from t3 a,t1 b where a.s1=b.t11 and a.s2=b.t22  and a.s4 = b.t44-1
)
select s1,s2,s3 from t3 x where x.s4=(select max(s4) from t3 y where x.s1=y.s1 and x.s2=y.s2) order by s1,s2 ;


这样写也是可以的
不知道楼主多加一列的目的是什么?请教一下

使用道具 举报

回复
论坛徽章:
1
祖国60周年纪念徽章
日期:2009-10-09 08:28:00
15#
发表于 2008-10-18 20:01 | 只看该作者
DB2 9.5里也支持 Connect By了。

使用道具 举报

回复
论坛徽章:
68
林肯
日期:2013-09-12 15:57:33马自达
日期:2013-10-11 13:52:31路虎
日期:2014-01-26 14:35:49现代
日期:2013-08-29 14:39:50三菱
日期:2013-11-25 11:21:19雪佛兰
日期:2013-09-12 15:55:00一汽
日期:2013-11-28 14:15:05技术图书徽章
日期:2013-12-11 10:11:35技术图书徽章
日期:2013-12-11 10:10:51技术图书徽章
日期:2014-01-14 10:54:13
16#
发表于 2008-10-20 09:32 | 只看该作者
不错,父、子表的关系讲的很详细;

其实应该注意到
db2的递归结果是水平的,也就是一个level接着一个level的找;

oracle则是垂直的,从一个节点向下直到遍历到叶子节点;

2者各有利弊,看具体的业务查询要求了,呵呵

不对的地方请指正


另外:

t1(t11,t22,t33,t44,t55) as (
select t1,t2,t3,rownumber() over(partition by t1,t2) as t4,rownumber() over(partition by t1,t2) as t5 from t

我增加"t4\t5"列的别名,看上去更舒服一些;:)

使用道具 举报

回复
论坛徽章:
0
17#
发表于 2008-10-20 22:37 | 只看该作者
厉害!!!

使用道具 举报

回复
论坛徽章:
2
生肖徽章2007版:龙
日期:2009-12-13 10:51:072010广州亚运会纪念徽章:武术
日期:2011-03-01 22:20:24
18#
发表于 2008-10-21 20:48 | 只看该作者
很强大~~~

使用道具 举报

回复
论坛徽章:
0
19#
发表于 2008-10-28 15:34 | 只看该作者
留个爪,慢慢看

使用道具 举报

回复
论坛徽章:
24
设计板块每日发贴之星
日期:2009-02-02 01:01:042012新春纪念徽章
日期:2012-01-04 11:53:54ITPUB十周年纪念徽章
日期:2011-11-01 16:24:042010广州亚运会纪念徽章:壁球
日期:2010-11-22 15:43:03ITPUB元老
日期:2010-11-18 13:03:452010新春纪念徽章
日期:2010-03-01 11:04:582010年世界杯参赛球队:瑞士
日期:2010-01-05 13:47:142010新春纪念徽章
日期:2010-01-04 08:33:08生肖徽章2007版:兔
日期:2009-11-01 20:09:03ITPUB8周年纪念徽章
日期:2009-10-09 21:30:11
20#
发表于 2009-2-25 16:37 | 只看该作者
up

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表