ORACLE下的:比如有   支队、大队、中队隶属关系是  中队属于大队,大队属于支队,有字段  LSJG存放它上级机构的ID
 例:JGID(机构ID)  LSJG(隶属机构)  JGLX(机构类型)
   1001            1002              中队
   1002            1003              大队
   1003            1004              支队
现在我要查找 所有某支队下的数据,用循环肯定可以,即,先查找该支队下所有的大队,再为每个大队循环下中队,有什么办法,能用一句SQL查出所有该支队下的所有数据呢?

解决方案 »

  1.   

    Select * From test 
    Start With lsjg = '1004'
    Connect By Prior  jgid =lsjg
      

  2.   

    with temp as(
    select 1001 jgid,1002 lsjg,'中队' jglx from dual
    union all
    select 1002 jgid,1003 lsjg,'大队' jglx from dual
    union all
    select 1003 jgid,1004 lsjg,'支队' jglx from dual
    )
    select jgid,lsjg,jglx,
    ltrim(sys_connect_by_path(jgid,'--->'),'--->') from temp
    start with lsjg = '1004'
    connect by prior jgid = lsjg
      

  3.   

    你们理解理我的意思了,我写了个,也行,但感觉很笨,如下select * from t_jgjbxx where z_lsjg in (select z_jgid from t_jgjbxx where z_lsjg='201009061423546564154') or  z_lsjg='201009061423546564154'其中 '201009061423546564154'是某支队的IDor  z_lsjg='201009061423546564154'  是查找该支队下的所有大队z_lsjg in (select z_jgid from t_jgjbxx where z_lsjg='201009061423546564154')是查找到了支队下所有大队下的    中队
    整个意思就是给一个ID,查找它下面的数据,及它下面数据的下面数据,有可能还会有下面数据的下面数据的下面数据.................
      

  4.   


    这样就可以了,用CONNECT BY
      

  5.   

    with temp as(
    select 1001 jgid,1002 lsjg,'中队' jglx from dual
    union all
    select 1002 jgid,1003 lsjg,'大队' jglx from dual
    union all
    select 1003 jgid,1004 lsjg,'支队' jglx from dual
    )
    Select * From temp  
    Start With lsjg = '1004'
    Connect By Prior jgid =lsjg