如何高效查询某个部门及其所有子部门的员工?
mysql高效查询部门及其子部门员工
问题:如何高效地查询某个部门及其所有子部门下的员工,避免重复数据?
表结构:
- department:部门信息,包括唯一编号、部门名称、上级部门编号和所属公司
- user:员工信息,包括唯一编号、昵称和所属公司
- department_user_relate:部门员工关联表,包括唯一编号、部门编号和员工编号
查询方案:
WITH RECURSIVE depts(id) AS( SELECT id FROM department WHERE id = 要查找的部门ID UNION ALL SELECT id FROM department AS d where d.parent_id = id ) select * from user where user.id in ( SELECT user_id FROM department_user_relate where dept_id in ( select id from depts ) )
扩展:
- 不支持 cte 表达式时,可以将所有部门信息查询出来,再与关联表进行查询。
- 如果不支持 cte 格式,可以修改部门树表的结构,将部门的所有父 id 保存下来,并在查找时使用 find_in_set 函数进行判断。
- 如果父 id 采用 json 结构字段保存,可以用 json_contains 函数进行判断。
以上就是如何高效查询某个部门及其所有子部门的员工?的详细内容,更多请关注其它相关文章!