如题,因为树的树干到树叶有的有5层,有的有6层,如何通过一条语句实现只显示树叶的数据?

解决方案 »

  1.   

    如果你的表结构类似这样的:id,parent_id,如果要查出所有的叶子节点,也就是不包含在parent_id中的id,所以查所有叶子节点很简单:
    select id from tablename where id not in (select parent_id from tablename);要查询指定节点下的所有叶子节点,试试下面的方法SQL> select * from b;        C1         C2
    ---------- ----------
             1 
             2          1
             3          2
             4          3
             5          2
             6          5
             7          67 rows selectedSQL> select c1,c2 from
      2  (select b.*,row_number() over(partition by rownum - level order by level desc) rn
      3  from b start with c1 =2 connect by prior c1 = c2
      4  ) where rn = 1
      5  /        C1         C2
    ---------- ----------
             4          3
             7          6
      

  2.   

    能详细解释一下吗?rownum - level看不明白
      

  3.   

    如果表中只有一棵树,可以
    select * from tablename where parent_id not in(select id from tablename)
      

  4.   

    select * from tablename where c1 not in(select c2 from tablename)row_number() 是分组(partition by )之后 该条记录在本组内的序号,而 rownum是一个查询结果的流水序号。
    level是进行递归查询(connect by start with)后的层次。
      

  5.   

    http://blog.csdn.net/precipitant/archive/2005/08/03/445022.aspx
    http://blog.csdn.net/precipitant/archive/2005/08/05/446797.aspx
      

  6.   

    树状的结构都有一个层次的概念,level也只有在使用connect by时才有的,它表示节点所在层的深度,而rownum可以看做该记录在数据库表的位置,相当于行号,例如上面的例子,只有1颗树,但是却有2个分支,同一个分支里ROWNUM-LEVEL 的结果是一样的,这样只要求每个分支里level最大的,也就是最底层的节点就是叶子节点了SQL> select b.*,level,rownum,rownum - level
      2  from b start with c1 =2 connect by prior c1 = c2
      3  /        C1         C2      LEVEL     ROWNUM ROWNUM-LEVEL
    ---------- ---------- ---------- ---------- ------------
             2          1          1          1            0
             3          2          2          2            0
             4          3          3          3            0
             5          2          2          4            2 ---这里是树的分支
             6          5          3          5            2
             7          6          4          6            26 rows selected