Oracle SQL按级别连接

时间:2014-06-02 10:09:54

标签: sql oracle

任何人都可以解释以下查询的行为: -

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 个答案:

答案 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是表格中的行数