有张记录有层级关系的表(CHILD_ID 主键,PARENT_ID可以为空)
(为了便于观看,数据记录我用字符表示,实际上都是number型的)
CHILD_ID     PARENT_ID
   A
   A1            A
   A2            A
   A3            A
   A21           A2
   A22           A2
   A31           A3
   A211          A21
    .
    .
    .
问题是,我给出两个ID如何快速的判定他们是否存在这种父子关系 
比如,A1和A2就没有这种关系,而A211和A则有这种父子关系(这里的父子关系确切的说是只要这两个ID有继承关系就是父子关系)
在线等待......

解决方案 »

  1.   

    select * , LEVEL from TAB start with child_id='A3' connect by prior child_id = parent_id 
    可以得到是否有父子关系
      

  2.   

    tyrone98(林林) :
    你的方法似乎不能满足要求,这样只可求得A3的层级关系,如果要判断另一个值(比如A21)和A3是否有层级关系的话,还要在你所做的查询中做一次查询,看PARENT_ID是否有等于A21的,这样对于大量操作的话,是很影响性能的
      

  3.   

    我觉得只能用connect by 语法去判断了,应该说oracle的这个语法很快的,比sqlserver快多了,树型的遍历本来就只能一层层去试.
      

  4.   

    select  count(*)  from test_connect
    where child_id = 'A211'
    start with parent_id='A' 
    connect by prior child_id = parent_id