mysql 有部门表(unique_code,parent_code,relati e_codes),relarie_codes是部门路径包括父级部门、本身部门和子部门,查询部门和子部门人员
时间: 2023-12-14 16:40:22 浏览: 157
Matlab-20120611.rar_END POINT DETECTION_The Point_entropy_relati
可以使用 MySQL 中的递归查询来实现此功能。以下是一个可能的查询:
```sql
WITH RECURSIVE dept_tree AS (
SELECT unique_code, parent_code, relation_codes
FROM department
WHERE unique_code = 'your_department_code'
UNION ALL
SELECT d.unique_code, d.parent_code, d.relation_codes
FROM department d
JOIN dept_tree dt ON d.parent_code = dt.unique_code
)
SELECT e.*
FROM employee e
JOIN dept_tree dt ON dt.relation_codes LIKE CONCAT('%/', e.department_code, '/%')
```
在上面的查询中,我们使用了一种称为“递归公共表表达式”的技术。首先,我们从部门表中选择指定部门的记录,并将其添加到结果集中。然后,我们递归地连接每个父级部门的记录,直到到达根部门为止。这样,我们就可以构建出一个包含指定部门及其子部门的记录集合,其中每个记录都包含了它们的关系路径(即 relation_codes 字段)。
接下来,我们将员工表与这个记录集合连接,使用 LIKE 运算符来查找属于这些部门之一的员工。由于 relation_codes 中包含了父级部门和子部门的代码,我们需要使用 CONCAT 函数将员工的部门代码拼接成一个类似于“/dept_code/”的字符串,并用通配符“%”匹配。这样,我们就可以找到所有属于指定部门及其子部门的员工了。
请注意,这个查询可能会比较耗时,特别是在部门和员工数量很大的情况下。因此,你可能需要对表结构和索引进行优化,以提高查询性能。
阅读全文