mysql 有部门表(unique_code,parent_code,relati e_codes),relarie_codes是部门路径包括父级部门本身部门和子部门,查询部门和子部门人员
时间: 2024-01-21 09:16:14 浏览: 127
可以通过使用MySQL的递归查询来实现查询部门和子部门人员的操作。以下是一种可能的实现方式:
1. 首先,可以使用查询指定部门及其子部门的所有部门路径的查询语句,如下所示:
```
WITH RECURSIVE cte AS (
SELECT unique_code, parent_code, relatie_codes
FROM department
WHERE unique_code = '指定部门编号'
UNION ALL
SELECT d.unique_code, d.parent_code, d.relatie_codes
FROM department d
JOIN cte ON d.parent_code = cte.unique_code
)
SELECT * FROM cte;
```
这个查询语句将以指定的部门编号为起点,递归查询该部门及其所有子部门的部门路径信息,并将结果存储在一个公用表达式(CTE)中。具体来说,这个查询语句包含了两个部分:
- 第一部分:查询指定部门的部门路径信息,并将其作为递归查询的起点。
- 第二部分:使用JOIN操作将当前部门的所有子部门加入到递归查询中,直到所有子部门都被查询完毕。
2. 接下来,可以使用上一步的查询结果作为子查询,查询这些部门及其子部门的所有人员信息,如下所示:
```
SELECT * FROM employee
WHERE department_code IN (
SELECT unique_code FROM (
WITH RECURSIVE cte AS (
SELECT unique_code, parent_code, relatie_codes
FROM department
WHERE unique_code = '指定部门编号'
UNION ALL
SELECT d.unique_code, d.parent_code, d.relatie_codes
FROM department d
JOIN cte ON d.parent_code = cte.unique_code
)
SELECT * FROM cte
) AS dept
);
```
这个查询语句将从employee表中查询所有所属于指定部门及其子部门的人员信息。具体来说,这个查询语句使用了一个子查询,该子查询将上一步查询到的部门信息作为过滤条件,只查询这些部门及其子部门的人员信息。注意,这里使用了一个嵌套的SELECT语句来引用公用表达式cte,因为MySQL不允许直接在子查询中使用带有递归查询的CTE。
综上所述,可以通过以上两个查询语句来查询指定部门及其子部门的所有人员信息。
阅读全文