connect by level<n的结果集数量

刚才遇到个connect by level
SQL> select * from dept;
DEPTNO DNAME          LOC
------ -------------- -------------
    10 ACCOUNTINGaa   NEW YORK
    20 RESEARCHaa     DALLAS
    30 SALESaa        CHICAGO
    40 OPERATIONSaa   BOSTON
SQL> select * from dept where deptno=10 connect by level<2;
DEPTNO DNAME          LOC
------ -------------- -------------
    10 ACCOUNTINGaa   NEW YORK
SQL> select dept.*,level from dept where deptno=10 connect by level<3;
DEPTNO DNAME          LOC                LEVEL
------ -------------- ------------- ----------
    10 ACCOUNTINGaa   NEW YORK               1
    10 ACCOUNTINGaa   NEW YORK               2
    10 ACCOUNTINGaa   NEW YORK               2
    10 ACCOUNTINGaa   NEW YORK               2
    10 ACCOUNTINGaa   NEW YORK               2
SQL> select dept.*,level from dept where deptno=10 connect by level<4;
DEPTNO DNAME          LOC                LEVEL
------ -------------- ------------- ----------
    10 ACCOUNTINGaa   NEW YORK               1
    10 ACCOUNTINGaa   NEW YORK               2
    10 ACCOUNTINGaa   NEW YORK               3
    10 ACCOUNTINGaa   NEW YORK               3
    10 ACCOUNTINGaa   NEW YORK               3
    10 ACCOUNTINGaa   NEW YORK               3
    10 ACCOUNTINGaa   NEW YORK               2
    10 ACCOUNTINGaa   NEW YORK               3
    10 ACCOUNTINGaa   NEW YORK               3
    10 ACCOUNTINGaa   NEW YORK               3
    10 ACCOUNTINGaa   NEW YORK               3
    10 ACCOUNTINGaa   NEW YORK               2
    10 ACCOUNTINGaa   NEW YORK               3
    10 ACCOUNTINGaa   NEW YORK               3
    10 ACCOUNTINGaa   NEW YORK               3
    10 ACCOUNTINGaa   NEW YORK               3
    10 ACCOUNTINGaa   NEW YORK               2
    10 ACCOUNTINGaa   NEW YORK               3
    10 ACCOUNTINGaa   NEW YORK               3
    10 ACCOUNTINGaa   NEW YORK               3
DEPTNO DNAME          LOC                LEVEL
------ -------------- ------------- ----------
    10 ACCOUNTINGaa   NEW YORK               3
21 rows selected

我预期的结果,所得结果数量应该就是level
看了一下官方文档中CONNECT_BY_ISCYCLE的解释,(在11g  sql reference 中37页图“Figure 2–1 Hierarchical Tree”),渐渐明白了原因。
我们可以将语句中的level理解为对“遗传关系树”的层数限制。具体来说:
level=1时
parent:10
child :10
level=2时
(1)
parent:10
child :10、20、30、40
(2)
parent:10
child :10

level=3时
(1)
grandparent:10
parent:10、20、30、40
child :10、20、30、40
共16条
(2)
grandparent:10
parent:10
child :10、20、30、40
共4条
(3)
grandparent:10
parent:10
child :10
共1条
最后得到16+4+1
这样推测,level<5时,应该是64+16+4+1=85条
证明:
SQL> select count(1) from dept where deptno=10 connect by level<5;
  COUNT(1)
----------
        85
SQL> select count(1) from dept where deptno=10 connect by level<6;
  COUNT(1)
----------
       341
      
这是集合的思想得到的。level则得到的结果集数量为:
m^(n-2)+m^(n-3)+……+m^2+m+1

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26451536/viewspace-768165/,如需转载,请注明出处,否则将追究法律责任。

user_pic_default.png
请登录后发表评论 登录
全部评论
<%=items[i].createtime%>

<%=items[i].content%>

<%if(items[i].items.items.length) { %>
<%for(var j=0;j
<%=items[i].items.items[j].createtime%> 回复

<%=items[i].items.items[j].username%>   回复   <%=items[i].items.items[j].tousername%><%=items[i].items.items[j].content%>

<%}%> <%if(items[i].items.total > 5) { %>
还有<%=items[i].items.total-5%>条评论 ) data-count=1 data-flag=true>点击查看
<%}%>
<%}%>
<%}%>

转载于:http://blog.itpub.net/26451536/viewspace-768165/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值