高效查询mysql中指定部门及其所有子部门下的所有员工
本文介绍如何高效查询MySQL数据库中指定部门(包含所有子部门)下的所有员工信息,并处理员工可能隶属于多个部门的情况。 数据库包含三个表:department(部门表)、user(员工表)和department_user_relate(部门员工关联表)。目标是根据给定部门ID,查询该部门及其所有子部门下所有员工,且不重复。
department表包含部门层级关系,parent_id字段表示上级部门ID。department_user_relate表体现了员工可能属于多个部门的情况。因此,简单的部门查询无法满足需求,需要递归查询所有子部门。
最佳方案是使用递归公共表达式 (CTE,Common Table Expression)。以下SQL语句利用CTE实现递归查询:
WITH RECURSIVE depts(id) AS ( SELECT id FROM department WHERE id = :department_id -- 替换 :department_id 为实际的部门ID UNION ALL SELECT id FROM department WHERE parent_id IN (SELECT id FROM depts))SELECT DISTINCT u.*FROM user uJOIN department_user_relate dur ON u.id = dur.user_idWHERE dur.dept_id IN (SELECT id FROM depts);
登录后复制
本文来自互联网或AI生成,不代表软件指南立场。本站不负任何法律责任。