oracle的connect by 什么意思

见下面几个语句 (请问为什么第三个语句插入的数据只有一条, where 和 connect by的区别):

create table t1 as select rownum as id, rownum+1 as id2 from dual connect by level<=5;
select * from t1

clipboard.png

create table t2 as select rownum as id, rownum+1 as id2 from dual connect by rownum <=5;
select * from t2

clipboard.png

create table t3 as select rownum as id, rownum+1 as id2 from dual where rownum <=5;
select * from t3

clipboard.png

阅读 4.9k
2 个回答

connect by 是oracle中特殊的递归查询的语法,多用于组织结构遍历、菜单树遍历等场景,如下面的一个功能菜单表,pid表示上级菜单的id,0表示无上级菜单,如果想查出顶级菜单下的所有菜单,可以用下面的写法:

id pid 
1 0
2 1
3 1
4 2
5 3
select *
from t
start with pid = 0
connect by pid = prior id

你给的例子中,是connect by的一个特殊用法,用来产生指定行的一个虚拟表。

select ... from ... connect by ... 递归遍历查询

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进