我有3张桌子:
用户 / 中间表 / 部门
中间表和用户是多对一的。 中间表和部门也是多对一的。
如何只获得部门,哪个是多个用户。
| USER | | MIDDLE TABLE | | DEPARTMENT |
|------| |--------------| |--------------|
|id |----| id |----| id |
| | | user_id | | |
| | | department_id| | |
编辑:用户不能是同一个用户。在这种结构中,可以在一个部门中多次使用一个用户。
| USER | | MIDDLE TABLE | | DEPARTMENT |
|--------| |-----------------------| |--------------|
| id |1|2|----| id |1|2|3|4|----| id |1|2| |
| | | user_id |1|1|2|1| | |
| | | department_id |1|1|2|2| | |
现在我想只获得部门ID:2
答案 0 :(得分:2)
这是一个简单的group by
查询:
select department_id
from middle_table
group by department_id
having count(distinct user_id) > 1;
如果用户只能分配给一个部门,那么中间表中的id
列就没用了,您应该将(user_id, department_id)
作为该表的主键。
如果您还需要部门信息,可以加入:
select d.*
from department d
join (
select department_id
from middle_table
group by department_id
having count(distinct user_id) > 1
) sd on sd.department_id = d.department_id;
答案 1 :(得分:0)
获取部门表中有超过1名员工的字段
SELECT Department.*
FROM Department WHERE Department.ID IN (
SELECT department_id
FROM Middle_table
GROUP BY Department_id
HAVING COUNT(user_id) > 1 )