ORACLE下的:比如有 支队、大队、中队隶属关系是 中队属于大队,大队属于支队,有字段 LSJG存放它上级机构的ID
例:JGID(机构ID) LSJG(隶属机构) JGLX(机构类型)
1001 1002 中队
1002 1003 大队
1003 1004 支队
现在我要查找 所有某支队下的数据,用循环肯定可以,即,先查找该支队下所有的大队,再为每个大队循环下中队,有什么办法,能用一句SQL查出所有该支队下的所有数据呢?
例:JGID(机构ID) LSJG(隶属机构) JGLX(机构类型)
1001 1002 中队
1002 1003 大队
1003 1004 支队
现在我要查找 所有某支队下的数据,用循环肯定可以,即,先查找该支队下所有的大队,再为每个大队循环下中队,有什么办法,能用一句SQL查出所有该支队下的所有数据呢?
Start With lsjg = '1004'
Connect By Prior jgid =lsjg
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
整个意思就是给一个ID,查找它下面的数据,及它下面数据的下面数据,有可能还会有下面数据的下面数据的下面数据.................
这样就可以了,用CONNECT BY
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