首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在db2中使用递归查询

问如何在db2中使用递归查询
EN

Stack Overflow用户
提问于 2016-05-10 13:12:05
回答 3查看 1.6K关注 0票数 0

我正在学习如何在db2中使用递归查询,网上有一个问题要打印如下模式

代码语言:javascript
复制
 * 
 ** 
 *** 
 **** 
 ***** 
 ****** 
 ******* 
 ******** 
 ********* 
 ********** 
 *********** 

多达20层,使用以下查询在Oracle中解决它

代码语言:javascript
复制
select lpad('*', level, '*') result  from dual  connect by level <= 20 

但是不知道如何在db2中做这件事,真的很感激你的帮助。

另外,如何做到倒序,即如何打印从20层到1层的恒星金字塔?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-05-11 14:30:19

正确查询db2,使用REPEAT而不是LPAD

代码语言:javascript
复制
with x(id,val) as 
(
 select 1, REPEAT('*',1) from sysibm.sysdummy1
 union all
 select id+1, REPEAT('*',id+1) from x where id < 20
)
select val from x
代码语言:javascript
复制
with x(id,val) as 
(
 select 20, REPEAT('*',20) from sysibm.sysdummy1
 union all
 select id-1, REPEAT('*',id-1) from x where id > 1
)
select val from x
票数 0
EN

Stack Overflow用户

发布于 2016-05-10 13:39:33

将dual替换为sysibm.sysdummy1

代码语言:javascript
复制
select lpad('*', level, '*') result  
from sysibm.sysdummy1   
connect by level <= 20                                                           
票数 0
EN

Stack Overflow用户

发布于 2016-05-10 14:35:33

打印1到20 *s的递归查询

代码语言:javascript
复制
with x(id,val) as 
(
   select 1 as id,lpad('*',1,'*') as val from sysibm.sysdummy1
   union all
   select id+1,lpad('*',id+1,'*') from x where id < 20
)
select val from x

打印20到1 *s的递归查询

代码语言:javascript
复制
with x(id,val) as 
(
 select lpad('*',20,'*') as val,20 as id from sysibm.sysdummy1
 union all
 select lpad('*',id-1,'*'),id-1 from x where id > 1
)
select val from x
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37139594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档