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能不能搞定呢?

解决方案 »

  1.   

    start with PROBLEMTYPEID ='6' 
    connect by PROBLEMTYPEID = prior PARENTTYPEID;搞好父子关系呀
      

  2.   

    ??
    我可以的
    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就是乱码而已,我日文系统
      

  3.   

    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 ;
      

  4.   

    -- 可以考虑写存储过程:
    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                描述67 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