登录
首页 >  数据库 >  MySQL

如何高效查询某个部门及其所有子部门的员工?

时间:2024-11-13 13:46:07 217浏览 收藏

学习知识要善于思考,思考,再思考!今天golang学习网小编就给大家带来《如何高效查询某个部门及其所有子部门的员工?》,以下内容主要包含等知识点,如果你正在学习或准备学习数据库,就都不要错过本文啦~让我们一起来看看吧,能帮助到你就更好了!

如何高效查询某个部门及其所有子部门的员工?

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 )
)

扩展:

  1. 不支持 cte 表达式时,可以将所有部门信息查询出来,再与关联表进行查询。
  2. 如果不支持 cte 格式,可以修改部门树表的结构,将部门的所有父 id 保存下来,并在查找时使用 find_in_set 函数进行判断。
  3. 如果父 id 采用 json 结构字段保存,可以用 json_contains 函数进行判断。

今天关于《如何高效查询某个部门及其所有子部门的员工?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>