用START WITH....CONNECT BY...
不过你的表结构要改http://www.adp-gmbh.ch/ora/sql/connect_by.html

解决方案 »

  1.   

    可以用start with..connect by来实现上下级关系.可以用level来分层.
      

  2.   

    10:44:19 SQL> select * from tre;NAME       CASCADECOD
    ---------- ----------
    A          1
    B          1.1
    C          1.1.1
    D          1.1.2
    E          1.2
    F          1.2.1
    G          2已选择7行。已用时间:  00: 00: 00.31
    10:44:38 SQL> select name from tre where not exists (
    10:44:59   2  select 1 from tre t where instr(t.cascadecode,tre.cascadecode)=1 and
    10:45:03   3  length(tre.cascadecode)<length(t.cascadecode));NAME
    ----------
    C
    D
    F
    G已用时间:  00: 00: 00.16
    10:45:05 SQL>
      

  3.   

    G 对应的 CASCADECODE 应为 1.3吧?
      

  4.   

    bzszp(www.bzszp.533.net) 的简单。
      

  5.   

    bzszp的例子中,C为1.1.1,这是什么类型的数据阿??我自己设的时候设为varchar2不行啊??谢谢大虾!!
      

  6.   

    就是varchar2类型,没有问题的。
      

  7.   

    sql>insert into tre values('C',1.1.1)ora-00917:mising commabzszp你看,有这个错误阿,我定义的是varchar2(20)类型的,怎么不行??
      

  8.   

    insert into tre values('C','1.1.1')
      

  9.   

    to  txlicenhe(马可) 
    哎呀,不好意思,犯了一个这么愚蠢的问题
      

  10.   

    我想这个你的表结构要改才符合树结构
    NAME PARENTNODE SONNODE
    这种结构可以用START WITH ...CONNECT 语句实现.
    而你的要求有点象制造业的BOM展开中的一种.取子阶..一般这种东西可以写成存储过程的.
      

  11.   

    select * from tablename where instr(CASCADECODE,'.',1,4)>0
      

  12.   

    不好意思,第一次的发错了应为:
    select * from tablename where instr(CASCADECODE,'.',1,2)>0对你有帮助是我最大的快乐