有人能解释下面查询的行为吗:
select level,t.*
from
( select 'one','two'from dual
union all
select 'one','two'from dual
) t
connect by level<=2
内部查询有2行。我期望得到4行输出,但实际上却得到了6行输出。为什么会这样,以及这是如何工作的?
这个查询从你的两行数据中开始,先将它们相加,然后继续使用第二行数据,并再次将它们相加。
请按照以下方式更改您的查询:
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
请阅读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条记录的原因。)
CONNECT BY LEVEL 给出以下行数公式:
x+x2+x3+x4+...x^n = Sx^n
其中 n 是 LEVEL 的数量,x 是表中的行数。