对oracle中的层次化查询不太理解,看过些资料还是难理解,大家帮帮我!可举个例子给我。

解决方案 »

  1.   


    比如start with  connect by prior  这些不懂
      

  2.   


    select ... from tablename 
    start by cond1 
    connect by cond2 
    where cond3; 
    简单说来是将一个树状结构存储在一张表里,比如一个表中存在两个字段: 
    id,parentid那么通过表示每一条记录的parent是谁,就可以形成一个树状结构。 
    用上述语法的查询可以取得这棵树的所有记录。 
    其中COND1是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树。 
    COND2是连接条件,其中用PRIOR表示上一条记录,比如 CONNECT BY PRIOR ID=PRAENTID就是说上一条记录的ID是本条记录的PRAENTID,即本记录的父亲是上一条记录。 
    COND3是过滤条件,用于对返回的所有记录进行过滤。
    TBL_TEST
    ID      NAME   PID
    1 10 0
    2 11 1
    3 20 0
    4 12 1
    5 121 2从Root往树末梢递归
    select * from TBL_TEST
    start with id=1
    connect by prior id = pidID      NAME   PID
    1 10 0
    2 11 1
    5 121 2
    4 12 1从末梢往树ROOT递归
    select * from TBL_TEST
    start with id=5
    connect by prior pid = idID      NAME   PID
    5 121 2
    2 11 1
    1 10 0
      

  3.   

    从Root往树末梢递归
    select * from TBL_TEST
    start with id=1
    connect by prior id = pidID      NAME   PID
    1    10    0
    2    11    1
    5    121    2
    4    12    1对这个结果难理解,这个sql的意思是上条记录的id是本条记录的pid吧? 
    比如下面这个:
    5    121    2
    4    12    1上条记录的id是5  而本条记录却是1  
    就这里有点不懂,麻烦大师解答下.