【发布时间】:2017-01-11 00:09:19
【问题描述】:
Oracle Database 12c 企业版 12.1.0.2.0 版
我希望我只是遗漏了一些东西,但如果我在没有“连接方式”的情况下运行此查询,我会得到 2 行。当我添加“按级别
谁能帮我理解这里发生了什么?我不是在寻找只将每一行重复 4 次的解决方案——我已经得到了。我只是想了解发生了什么以及为什么。
with alpha as (
select 1 as id
from dual
),
beta as (
select 1 as alpha_id,
1 as beta_no
from dual
union all
select 1 as alpha_id,
2 as beta_no
from dual
)
select a.id,
b.beta_no,
level as the_level
from alpha a
inner join beta b
on b.alpha_id = a.id
connect by level <= 4
order by a.id,
b.beta_no,
level
;
ID BETA_NO THE_LEVEL
1 1 1 1 1 2 1 1 2 1 1 3 1 1 3 1 1 3 1 1 3 1 1 4 1 1 4 1 1 4 1 1 4 1 1 4 1 1 4 1 1 4 1 1 4 1 2 1 1 2 2 1 2 2 1 2 3 1 2 3 1 2 3 1 2 3 1 2 4 1 2 4 1 2 4 1 2 4 1 2 4 1 2 4 1 2 4 1 2 4已选择 30 行
非常感谢 mathguy。他在下面的答案中提供的第二个链接正是我想要的。具体来说:
1 with t as (select 1 as id from dual union all
2 select 2 from dual)
3 --
4 select id, level
5 ,prior id
6 ,sys_connect_by_path(id,'=>') as cpath
7 from t
8* connect by level <= 3
SQL> /
ID LEVEL PRIORID CPATH
---------- ---------- ---------- --------------------------------------------------
1 1 =>1
1 2 1 =>1=>1
1 3 1 =>1=>1=>1
2 3 1 =>1=>1=>2
2 2 1 =>1=>2
1 3 2 =>1=>2=>1
2 3 2 =>1=>2=>2
2 1 =>2
1 2 2 =>2=>1
1 3 1 =>2=>1=>1
2 3 1 =>2=>1=>2
2 2 2 =>2=>2
1 3 2 =>2=>2=>1
2 3 2 =>2=>2=>2
14 rows selected.
从那个例子中我很清楚,但我很难用简洁的语言表达出来。
【问题讨论】:
标签: oracle connect-by hierarchical-query