昨天发现了利用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 SQL> select id,level from test_connect connect by level=2; ID LEVEL 12 rows selected 通过这两个测试我就在想,是不是connect by level=N就等于connect by level 接着去验证。 SQL> select id,level from test_connect connect by level=3; ID LEVEL 这里就只能拿到一层数据了,说明了我刚才的设想是不成立的,那到底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 SQL> select id,level from test_connect connect by level=4; ID LEVEL 这又说明了我刚才的设想又是错误的啦,又是不是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 6 rows selected SQL> select id,level from test_connect connect by level=3; ID LEVEL SQL> select id,level from test_connect connect by level=-1; ID LEVEL SQL> select id,level from test_connect connect by level=-100; ID LEVEL 由此我只能得到这样一个结果,对于connect by level=N,除了N=2可以拿到两层数据外,N是其他的任何数据(包括正负数)都是拿到一层数据。
---------- ----------
1 1
2 1
3 1
---------- ----------
1 1
1 2
2 2
3 2
2 1
1 2
2 2
3 2
3 1
1 2
2 2
3 2
---------- ----------
1 1
2 1
3 1
---------- ----------
1 1
2 1
3 1
4 1
---------- ----------
1 1
2 1
3 1
4 1
---------- ----------
1 1
1 2
2 2
2 1
1 2
2 2
---------- ----------
1 1
2 1
---------- ----------
1 1
2 1
---------- ----------
1 1
2 1
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/13387766/viewspace-483543/ ,如需转载,请注明出处,否则将追究法律责任。