start with...... connect by ......问题求解!

manchun 2009-07-14 09:41:16
drop table PROBLEMSTYPE;
create table PROBLEMSTYPE(
PROBLEMTYPEID varchar2(20),
PROBLEMTYPENAME varchar2(20),
PROBLEMLEVEL varchar2(20),
PARENTTYPEID varchar2(20),
TYPEPATH varchar2(200),
DESCRIPTION varchar2(200)
);
insert into PROBLEMSTYPE select '0','类型名称0','问题类型所在层次0',null,'路径0','描述0' from dual;
insert into PROBLEMSTYPE select '1','类型名称1','问题类型所在层次1','0','路径1','描述1' from dual;
insert into PROBLEMSTYPE select '2','类型名称2','问题类型所在层次2','1','路径2','描述2' from dual;
insert into PROBLEMSTYPE select '3','类型名称3','问题类型所在层次3','1','路径3','描述3' from dual;
insert into PROBLEMSTYPE select '4','类型名称4','问题类型所在层次4','2','路径4','描述4' from dual;
insert into PROBLEMSTYPE select '5','类型名称5','问题类型所在层次5','3','路径5','描述5' from dual;
insert into PROBLEMSTYPE select '6','类型名称6','问题类型所在层次6','1','路径6','描述6' from dual;

select level as 层级,
decode(level, 1,'*', 2,'**', 3,'***', 4,'****') 层次星星数,
CONNECT_BY_ROOT(PROBLEMTYPEID) 最顶层,
PROBLEMSTYPE.*
from PROBLEMSTYPE
start with PARENTTYPEID ='6'
connect by prior PROBLEMTYPEID=PARENTTYPEID ;

--这个sql查不出来值。 我想的是:当传过来的节点值是最终子节点的时候,查不出来值,我想connect by的时候,如果是有子节点的话,就查出子节点,如果没有子节点而本身就是子节点的话,就返回本身值。 这个在connect by的时候如何搞呢,一句sql能不能搞定呢?



...全文
124 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
suncrafted 2009-07-14
  • 打赏
  • 举报
回复
学习了
mantisXF 2009-07-14
  • 打赏
  • 举报
回复
-- 可以考虑写存储过程:
SQL> SELECT * FROM PROBLEMSTYPE;

PROBLEMTYPEID PROBLEMTYPENAME PROBLEMLEVEL PARENTTYPEID TYPEPATH DESCRIPTION
-------------------- -------------------- -------------------- -------------------- -------------------- --------------------
0 类型名称0 问题类型所在层次0 路径0 描述0
1 类型名称1 问题类型所在层次1 0 路径1 描述1
2 类型名称2 问题类型所在层次2 1 路径2 描述2
3 类型名称3 问题类型所在层次3 1 路径3 描述3
4 类型名称4 问题类型所在层次4 2 路径4 描述4
5 类型名称5 问题类型所在层次5 3 路径5 描述5
6 类型名称6 问题类型所在层次6 1 路径6 描述6

7 rows selected

-- 在存储过程中判断是否下面的SQL有返回值:
SQL> SELECT LEVEL AS 层级,
2 DECODE(LEVEL, 1, '*', 2, '**', 3, '***', 4, '****') 层次星星数,
3 CONNECT_BY_ROOT(PROBLEMTYPEID) 最顶层,
4 PROBLEMSTYPE.*
5 FROM PROBLEMSTYPE
6 START WITH PARENTTYPEID = '6'
7 CONNECT BY PRIOR PROBLEMTYPEID = PARENTTYPEID;

层级 层次星星数 最顶层 PROBLEMTYPEID PROBLEMTYPENAME PROBLEMLEVEL PARENTTYPEID TYPEPATH DESCRIPTION
---------- ---------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- --------------------

-- 如果上面的SQL没有返回值也就是在存储过程中COUNT(1)=0,那就用下面SQL的返回值:
SQL> SELECT LEVEL AS 层级,
2 DECODE(LEVEL, 1, '*', 2, '**', 3, '***', 4, '****') 层次星星数,
3 CONNECT_BY_ROOT(PROBLEMTYPEID) 最顶层,
4 PROBLEMSTYPE.*
5 FROM PROBLEMSTYPE
6 START WITH PROBLEMTYPEID = '6'
7 CONNECT BY PRIOR PROBLEMTYPEID = PARENTTYPEID;

层级 层次星星数 最顶层 PROBLEMTYPEID PROBLEMTYPENAME PROBLEMLEVEL PARENTTYPEID TYPEPATH DESCRIPTION
---------- ---------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- --------------------
1 * 6 6 类型名称6 问题类型所在层次6 1 路径6 描述6
[Quote=引用楼主 manchun 的帖子:]
SQL codedrop table PROBLEMSTYPE;
create table PROBLEMSTYPE(
PROBLEMTYPEID varchar2(20),
PROBLEMTYPENAME varchar2(20),
PROBLEMLEVEL varchar2(20),
PARENTTYPEID varchar2(20),
TYPEPATH varchar2(200),
DESCRIPTION varchar2(200)
);
insert into PROBLEMSTYPE select '0','类型名称0','问题类型所在层次0',null,'路径0','描述0' from dual;
insert into PROBLEMSTYPE select '1','类型名…
[/Quote]
ldw2545398 2009-07-14
  • 打赏
  • 举报
回复
select level as 层级,
decode(level, 1,'*', 2,'**', 3,'***', 4,'****') 层次星星数,
CONNECT_BY_ROOT(PROBLEMTYPEID) 最顶层,
PROBLEMSTYPE.*
from PROBLEMSTYPE
start with PROBLEMTYPEID ='1'
connect by prior PROBLEMTYPEID= PARENTTYPEID ;
robin_ares 2009-07-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 manchun 的回复:]
试了下,还是不行,取不到数据的。
[/Quote]
??
我可以的
select level as "层级",
decode(level, 1,'*', 2,'**', 3,'***', 4,'****') "层次星星数",
CONNECT_BY_ROOT(PROBLEMTYPEID) "最顶层",
PROBLEMSTYPE.*
from PROBLEMSTYPE
start with PROBLEMTYPEID ='6'
connect by PROBLEMTYPEID = prior PARENTTYPEID;

?? ?次星星数 最?? PROBLEMTYPEID PROBLEMTYPENAME PROBLEMLEVEL PARENTTYPEID TYPEPATH DESCRIPTION
1 * 6 6 ?型名称6 ???型所在?次6 1 路径6 描述6
2 ** 6 1 ?型名称1 ???型所在?次1 0 路径1 描述1
3 *** 6 0 ?型名称0 ???型所在?次0 路径0 描述0

就是乱码而已,我日文系统
manchun 2009-07-14
  • 打赏
  • 举报
回复
试了下,还是不行,取不到数据的。
robin_ares 2009-07-14
  • 打赏
  • 举报
回复
start with PROBLEMTYPEID ='6'
connect by PROBLEMTYPEID = prior PARENTTYPEID;

搞好父子关系呀

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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