高分请教:该SQL语句如何写?

chq_top 2003-08-22 06:12:09
有一表Tab(id,parentid,data),id指本身编码,parentid指父层id,如果没有父层(即自身已是根层),parentid为Null;编写SQL语句,查

询出每一个根层下所有子层、孙子层...的数据。示例:
1,null,data1
3,1,data3
4,3,data4
5,1,data5
2,null,data2
6,2,data6
7,2,data7
8,7,data8
根据要求,查询出来的结果如下:
parentid,id,data
1 ,1 ,data1
1 , 3 , data3
1 , 4 , data4
1 , 5 , data5
2 ,2 ,data2
2 , 6 , data6
2 , 7 , data7
2 , 8 , data8
要求父id均显示其根层的id。高分求救!!!

...全文
31 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
glacierking 2003-08-24
  • 打赏
  • 举报
回复
先说你会出多少分,我是个见分眼开的人,多少分???
klbt 2003-08-23
  • 打赏
  • 举报
回复
学习。
beckhambobo 2003-08-22
  • 打赏
  • 举报
回复
select decode(parentid,1,'1','1') parentid,id,data
from tab
connect by prior id=parentid
start with parentid is null

例子:
SQL> select * from aa;

ID FID
-- ---
1 0
2 1
3 1
4 2
5 3
6 4
6 5

7 rows selected

SQL>
SQL> select lpad(id,level*2+length(id),' ') id
2 from aa
3 connect by prior id = fid
4 start with fid = 0;

ID
--------------------------------------------------------------------------------
1
2
4
6
3
5
6

7 rows selected

SQL> select decode(fid,'1','1','1') fid,id
2 from aa
3 connect by prior id=fid
4 start with fid='1';

FID ID
--- --
1 2
1 4
1 6
1 3
1 5
1 6
wwl007 2003-08-22
  • 打赏
  • 举报
回复
connect by
start with
David1289 2003-08-22
  • 打赏
  • 举报
回复

不能用存储过程和函数吗?
用递归函数从子节点开始搜索,符合一个输出一个
jiezhi 2003-08-22
  • 打赏
  • 举报
回复
see sql reference about "Hierarchical Queries"

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧