A:部门表 name,id
B:人员表 name,id,part_id
select * from a where a.id in(select part_id from B where part_id='[指定部门id]')
上面的语句只能查询出指定部门ID下面是否有人员,不能查询指定部门ID下面的部门是否有人员那位大哥知道的?
B:人员表 name,id,part_id
select * from a where a.id in(select part_id from B where part_id='[指定部门id]')
上面的语句只能查询出指定部门ID下面是否有人员,不能查询指定部门ID下面的部门是否有人员那位大哥知道的?
这句什么意思啊,是部门下面还有部门,要统计子部门的人数?那你A表应该是个树的结构啊下面的语句是查指定部门下面有几个人
select a.name,a.id,count(b.id) num
from a,b
where a.id=b.part_id(+)
and a.id=指定部门ID
group by a.name,a.id
[align=center]==== 思想重于技巧 ====
[/align]
关键就是指定部门ID下面可能还有部门不好判断
打比方吧
就是
计算机部门(部门)--1.计算机应用(部门),
|
|---C某,D某(属于计算机应用部门) 2.计算机科学与技术(部门)
|
|——ii计算机科学(部门)
|——ii计算机技术(部门)
|
|---E某,F某(属于计算机技术部门) 3.A某,B某(直属计算机部门)那么如果我指定的部门ID是计算机部门,那么计算机部门可以显示出来;
如果我指定的部门ID是计算机科学与技术部门,他下面只有2个部门没有人员,那么就不会显示出来,可实际上他的子部门下面是有人的,
我最开始写的sql只判断当前指定的部门是否有人员存在,没有判断当前部门下面的子部门是否有人
该怎么解决?
from a
where a.id in (select part_id from B where part_id='[指定部门id]')
or a.id ='[指定部门id]';[align=center]==== 思想重于技巧 ====
[/align]
FROM (SELECT a.ID,a.NAME,COUNT(b.ID) num
FROM a,b
WHERE a.ID=b.part_id(+)
AND a.ID=指定部门ID
GROUP BY a.NAME,a.ID ) c
WHERE c.num > 0
FROM a,b
WHERE a.ID=b.part_id(+)
AND a.ID=指定部门ID
GROUP BY a.NAME,a.ID ) c --假如a部门下面没有人只有2个部门的情况
7楼你的这个查询仍然是只查询a.ID=指定部门ID的情况啊,我是想还要包括a.ID下面的子部门是否有人,就是说
部门下面还包含部门的情况
没有指定部门之间的层级,这你样的定义,没办法知道哪些是其下属部门。最起码要定义
A:部门表 name,id ,upid
指明层级关系,再用Connect By找出下级部门
select
*
from a
connect by prior id=upid
--start with upid is null--顶级为空
start with upid=xxx
来找该部门的下级部门
http://topic.csdn.net/u/20080329/11/217b018f-bffc-413f-ba03-df07249a612c.html