START WITH FATHERID = -1
 CONNECT BY PRIOR HR_CODE_ID=FATHERID这个条件有点问题,如果这样写可以吗?
START WITH FATHERID = -1
 CONNECT BY PRIOR FATHERID

解决方案 »

  1.   

    既然已经查出来了21和31,说明你的树状查询(start with connect by)是没有问题的,应该是其他的过滤条件给过滤掉了。
      

  2.   

    先谢谢两位的指点。
     zhengg21(很努力): 
    START WITH FATHERID = -1
     CONNECT BY PRIOR FATHERID报无效关系运算符错误,gladness(gladness) :21和31是满足条件的记录,且上面的结果和不加start with connect by的运行结果是一样的,我想也是过滤条件的问题,但要怎样写呢?
    各位帮帮小弟!!!!谢谢!谢谢!!非常感谢!
      

  3.   

    那就和你的具体数据和你想做什么有关了,你可以先不用start with connect by,然后把剩下的几个过滤条件分别试一下,看看是谁过滤掉的
      

  4.   

    把这条记录列出来:
    SELECT * FROM HR_CODE 
    WHERE HR_CODETYPE_ID 
    IN(SELECT HR_CODETYPE_ID FROM HR_CODETYPE WHERE VALIDSTATUS=1 AND TREESTATUS=-1)
    AND VALIDSTATUS=1 AND NO LIKE '%1%'
      

  5.   

    上面的结果和不加start with connect by的运行结果是一样的
      

  6.   

    不是已说了TREESTATUS=-1表示此类型是树结构,那么上面的查询当然是一样了
      

  7.   

    NO LIKE '%1%'这个条件过滤掉了21,31的父节点2和3
      

  8.   

    其实表HR_CODE中还有其他记录,我只想找出其中NO LIKE '%1%'的记录且也找出所有他们的父节点,如果不加NO LIKE '%1%',则找出了所有是树型的记录,这不是我想要的结果,各位大侠,帮帮忙!!!!!!
      

  9.   

    HR_CODETYPE表
    HR_CODETYPE_ID  TREESTATUS  VALIDSTATUS
    1 -1 1
    2 -1 1
    3 -1 1
    4 0 1
    5 0 1HR_CODE表
    HR_CODE_ID  HR_CODETYPE_ID  FATHERID  NO  VALIDSTATUS
    1 1 -1 1 1
    2 1 1 11 1
    3 1 1 12 1
    4 1 1 13 1
    5 2 -1 2 1
    6 2 5 21 1
    7 2 5 22 1
    8 2 5 23 1
    9 3 -1 3 1
    10 3 9 31 1
    11 3 9 32 1
    12 4 -1 4 1
    13 4 -1 41 1
    14 5 -1 5 1
    15 5 -1 51 1
    按上述查询查询的结果为:
    1 1 -1 1 1
    2 1 1 12 1
    3 1 1 13 1
    6 2 5 21 1
    10 3 9 31 1
     怎样才能把21、31的父节点:
    5 2 -1 2 1
    9 3 -1 3 1
    也查出来呢?谢谢!
      

  10.   

    HR_CODETYPE表
    HR_CODETYPE_ID  TREESTATUS  VALIDSTATUS
    1 -1 1
    2 -1 1
    3 -1 1
    4 -1 1
    5 -1 1
    6 0 1HR_CODE表
    HR_CODE_ID  HR_CODETYPE_ID  FATHERID  NO  VALIDSTATUS
    1 1 -1 1 1
    2 1 1 11 1
    3 1 1 12 1
    4 1 1 13 1
    5 2 -1 2 1
    6 2 5 21 1
    7 2 5 22 1
    8 2 5 23 1
    9 3 -1 3 1
    10 3 9 31 1
    11 3 9 32 1
    12 4 -1 4 1
    13 4 12 45 1
    14 4 12 46 1
    15 5 -1 5 1
    16 6 -1 6 1
    其实HR_CODE表还有许多类似的记录,在这里我就不好一一列举出来
    按上述查询查询的结果为:
    1 1 -1 1 1
    2 1 1 12 1
    3 1 1 13 1
    6 2 5 21 1
    10 3 9 31 1
     怎样才能把21、31的父节点:
    5 2 -1 2 1
    9 3 -1 3 1
    也查出来呢?
      

  11.   

    select * from 
    (SELECT * FROM HR_CODE 
    WHERE HR_CODETYPE_ID 
    IN (SELECT HR_CODETYPE_ID FROM HR_CODETYPE WHERE VALIDSTATUS=1 AND TREESTATUS=-1)
    AND VALIDSTATUS=1 AND NO LIKE '%1%')
     START WITH FATHERID = -1
     CONNECT BY PRIOR HR_CODE_ID=FATHERID