mysql 2张表查询出的数据形成树结构
时间: 2024-02-01 10:14:47 浏览: 78
可以使用递归查询和联接查询来实现将两张表查询出的数据形成树结构。
假设我们有两张表,一张是部门表(department),一张是员工表(employee),它们的结构如下:
```
CREATE TABLE department (
id INT PRIMARY KEY,
name VARCHAR(50),
parent_id INT
);
CREATE TABLE employee (
id INT PRIMARY KEY,
name VARCHAR(50),
department_id INT
);
```
其中,department 表中的 parent_id 字段表示该部门的上级部门的 ID,如果为NULL则表示该部门是一级部门;employee 表中的 department_id 字段表示该员工所在的部门的 ID。
现在我们要将它们查询出来形成树结构,可以按照以下步骤进行:
1. 首先,我们需要查询出所有的一级部门(即 parent_id 为 NULL 的部门):
```
SELECT d.id, d.name, e.id AS employee_id, e.name AS employee_name
FROM department d
LEFT JOIN employee e ON d.id = e.department_id
WHERE d.parent_id IS NULL;
```
2. 然后,我们需要对每个一级部门进行递归查询其下属的部门和员工:
```
WITH RECURSIVE department_tree AS (
SELECT d.id, d.name, e.id AS employee_id, e.name AS employee_name, 0 AS level
FROM department d
LEFT JOIN employee e ON d.id = e.department_id
WHERE d.parent_id IS NULL
UNION ALL
SELECT d.id, d.name, e.id AS employee_id, e.name AS employee_name, dt.level + 1 AS level
FROM department d
LEFT JOIN employee e ON d.id = e.department_id
JOIN department_tree dt ON d.parent_id = dt.id
)
SELECT id, name, employee_id, employee_name, level
FROM department_tree;
```
这样,我们就可以将两张表查询出的数据形成树结构。注意,这个查询语句可能会比较复杂和耗时,所以在实际使用中需要根据具体情况进行优化。
阅读全文