任何人都可以解释以下查询的行为: -
select level,t.*
from
( select 'one','two'from dual
union all
select 'one','two'from dual
) t
connect by level<=2
内部查询中有2行。我期待4行输出,但我得到6行输出。为什么会如此?这是如何工作的?
答案 0 :(得分:4)
查询从两行中的一行开始并添加两行,然后继续第二行并再次添加两行。
更改您的查询:
select level,t.*
from
( select 'one' from dual
union all
select 'two' from dual
) t
connect by level<=2;
这样可以更容易地看到会发生什么:
1 one
2 one
2 two
1 two
2 one
2 two
答案 1 :(得分:2)
阅读此http://docs.oracle.com/cd/B19306_01/server.102/b14200/queries003.htm
当level <= 1
时,您将获得每次记录1次。
当level <= 2
时,您将获得每个级别1次(对于级别1)+表中的记录数
(这意味着在这种情况下,2条记录的级别为1 + 2 * 2,记录级别为2.这就是你获得6条记录的原因。)
答案 2 :(得分:0)
CONNECT BY LEVEL给出以下行数 x + x2 + x3 + x4 + ... x ^ n = Sx ^ n
其中n是LEVEL的数量,x是表格中的行数