10g的
http://www.zdnet.com.cn/developer/database/story/0,3800066906,39401406-3,00.htm

解决方案 »

  1.   

    这个和我的不太一样啊,我想指定一个子ID,来显示它的最顶层的亲ID,这个好像不能指定子ID啊
      

  2.   

    SQL> select * from tree;NODE                 PNODE
    -------------------- --------------------
    1                    6
    7                    9
    9                    8
    1                    2
    2                    3
    3                    4
    1                    57 行 已选择SQL> 
    SQL> SELECT *
      2    FROM (SELECT LEVEL L, TREE.*
      3            FROM TREE
      4           START WITH PNODE = '4'
      5          CONNECT BY PNODE = PRIOR NODE
      6           ORDER BY L DESC)
      7   WHERE ROWNUM = 1
      8  /         L NODE                 PNODE
    ---------- -------------------- --------------------
             3 1                    2SQL> 
    SQL> SELECT *
      2    FROM (SELECT LEVEL L, TREE.*
      3            FROM TREE
      4           START WITH PNODE = '8'
      5          CONNECT BY PNODE = PRIOR NODE
      6           ORDER BY L DESC)
      7   WHERE ROWNUM = 1
      8  /         L NODE                 PNODE
    ---------- -------------------- --------------------
             2 7                    9SQL>
      

  3.   

    start with 子ID =4 connect by prior 亲ID=子ID  ,这样不行吗?
      

  4.   

    connect_by_root是10g的用法,如果只是取id = 4 的最上层亲id ,不用connect_by_root也很容易办到,只是如果要把所有id的最上层id都列出来,就要用connect_by_root了,我这里没环境,也不好测试,我想最后结果应该是这样的
         亲ID  子ID  最上层亲id
          1      2      1
          2      3      1
          3      4      1
          6      5      7
          7      6      7 
    这么写不知道行不行,你可以试试,我这里没测试环境,用法就这样了,自己多试试吧 SELECT CONNECT_BY_ROOT 亲id as 最上层id, 子id
          FROM employees
          --start with id = 4
          CONNECT BY 子id = PRIOR 亲id