Oracle SQL连接按级别查询

4

有人能解释下面查询的行为吗:

select level,t.*
from 
( select 'one','two'from dual
  union all
  select 'one','two'from dual
) t
connect by level<=2

内部查询有2行。我期望得到4行输出,但实际上却得到了6行输出。为什么会这样,以及这是如何工作的?

3个回答

5

这个查询从你的两行数据中开始,先将它们相加,然后继续使用第二行数据,并再次将它们相加。

请按照以下方式更改您的查询:

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

3

请阅读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条记录的原因。)


0

CONNECT BY LEVEL 给出以下行数公式:

x+x2+x3+x4+...x^n = Sx^n

其中 n 是 LEVEL 的数量,x 是表中的行数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接