【发布时间】:2012-11-24 11:15:00
【问题描述】:
在表上执行时,使用 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 行。
对于每个 ID 值,将“连接”的级别数增加到 3 个returns 13 rows。 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
documentation 在解释应该发生的情况时对我来说并不是特别清楚。这些权力发生了什么?为什么前两个查询与第三个查询不同?
【问题讨论】:
-
我们在 MySQL 5 中是否有类似的东西?
标签: sql oracle connect-by