ITPub博客

首页 > Linux操作系统 > Linux操作系统 > connect by level=的小问题

connect by level=的小问题

原创 Linux操作系统 作者:qgw521 时间:2008-10-31 10:20:46 0 删除 编辑

昨天发现了利用connect by可以把一列的值按某种规则全部链接起来,觉得很有趣而且很有用,今天就突然来了兴致随意测试下connect by level,一般情况下connect by 都是用在有树型结构的表上,但我这里测试的是一般的表,其实在论坛上也有很有人在这方面作了很深入的研究,我这里只是把发现的一些小问题和疑惑写出来。

SQL>create table test_connect as select 1 id from dual union all select 2 from dual

union all select 3 from dual;

关于connect by level

http://www.itpub.net/viewthread.php?tid=994465&extra=&page=1

我测试的只是connect by level=这种情况。

SQL> select id,level from test_connect connect by level=1;

        ID      LEVEL
---------- ----------
         1          1
         2          1
         3          1

SQL> select id,level from test_connect connect by level=2;

        ID      LEVEL
---------- ----------
         1          1
         1          2
         2          2
         3          2
         2          1
         1          2
         2          2
         3          2
         3          1
         1          2
         2          2
         3          2

12 rows selected

通过这两个测试我就在想,是不是connect by level=N就等于connect by level

接着去验证。

SQL> select id,level from test_connect connect by level=3;

        ID      LEVEL
---------- ----------
         1          1
         2          1
         3          1

这里就只能拿到一层数据了,说明了我刚才的设想是不成立的,那到底connect by level=N,那N的值是多少的时候就只出现一层数据了?难道N就是test_connect的行数?

SQL> insert into test_connect values(4);

1 row inserted

SQL> select id,level from test_connect connect by level=3;

        ID      LEVEL
---------- ----------
         1          1
         2          1
         3          1
         4          1

SQL> select id,level from test_connect connect by level=4;

        ID      LEVEL
---------- ----------
         1          1
         2          1
         3          1
         4          1

这又说明了我刚才的设想又是错误的啦,又是不是connect by level=N最多拿两层的数据呢?

QL> delete from test_connect where id in (3,4);

2 rows deleted

SQL> select id,level from test_connect connect by level=2;

        ID      LEVEL
---------- ----------
         1          1
         1          2
         2          2
         2          1
         1          2
         2          2

6 rows selected

SQL> select id,level from test_connect connect by level=3;

        ID      LEVEL
---------- ----------
         1          1
         2          1

SQL> select id,level from test_connect connect by level=-1;

        ID      LEVEL
---------- ----------
         1          1
         2          1

SQL> select id,level from test_connect connect by level=-100;

        ID      LEVEL
---------- ----------
         1          1
         2          1

由此我只能得到这样一个结果,对于connect by level=N,除了N=2可以拿到两层数据外,N是其他的任何数据(包括正负数)都是拿到一层数据。

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

请登录后发表评论 登录
全部评论

注册时间:2008-06-06

  • 博文量
    128
  • 访问量
    304329