在表上执行时,使用 CONNECT BY LEVEL 似乎返回太多行。发生的事情背后的逻辑是什么?
假设下表:
create table a ( id number );
insert into a values (1);
insert into a values (2);
insert into a values (3);
此查询返回 12 行 ( SQL Fiddle )。
select id, level as lvl
from a
connect by level <= 2
order by id, level
表 A 中的每一行,LVL 列的值为 1,表 A 中 LVL 列为 2 的每一行,即:
身份证 | 层积层 --+----- 1 | 1 1 | 2 1 | 2 1 | 2 2 | 1 2 | 2 2 | 2 2 | 2 3 | 1 3 | 2 3 | 2 3 | 2
它相当于这个查询,它返回相同的结果。
select id, level as lvl
from dual
cross join a
connect by level <= 2
order by id, level
我不明白为什么这些查询返回 12 行,或者为什么对于 ID 列的每个值,LVL 为 2 的行有 3 行,而 LVL 为 1 的行只有 1 行。
将“连接”的级别数增加到 3 会为每个 ID 值返回 13 行。1,其中 LVL 为 1,3,其中 LVL 为 2,9,其中 LVL 为 3。这似乎表明返回的行数是表 A 中的行数的 LVL 值减去 1 的幂。
尽管这些查询与以下查询相同,但我会返回 6 行
select id, lvl
from ( select level as lvl
from dual
connect by level <= 2
)
cross join a
order by id, lvl
对我来说,文档在解释应该发生的事情时并不是特别清楚。这些权力发生了什么?为什么前两个查询与第三个查询不同?