有一个表。
dept(id ,p_id,mc)记录了上下级关系
一个业务表
tab_name(id,dept_id);
现在在dept里面选择N个部门,求出部门里面 tab_name里面这N个部门的值,这个部门有可能有很多下级
------解决方案--------------------
with t1 as
(select 1 id, 'a' mc, null pid
from dual
union all
select 2 id, 'b' mc, null pid
from dual
union all
select 3 id, 'c' mc, null pid
from dual
union all
select 4 id, 'a1' mc, 1 pid
from dual
union all
select 5 id, 'b1' mc, 2 pid
from dual
union all
select 6 id, 'c1' mc, 3 pid
from dual
union all
select 7 id, 'a11' mc, 1 pid
from dual
union all
select 8 id, 'b11' mc, 2 pid
from dual
union all
select 9 id, 'c11' mc, 3 pid
from dual),
t2 as
(select 1 id, 7 dept_id
from dual
union all
select 2 id, 7 dept_id
from dual
union all
select 3 id, 8 dept_id
from dual
union all
select 4 id, 9 dept_id
from dual
union all
select 5 id, 7 dept_id
from dual
union all
select 6 id, 7 dept_id
from dual)
select count(t2.id), root_id
from t2,
(select t1.*, CONNECT_BY_ROOT(mc) root_id
from t1
start with mc in ('a', 'b', 'c', 'a1', 'a11')
connect by pid = prior id) t3
where t2.dept_id(+) = t3.id
group by root_id