要将两张表的数据形成树结构,需要使用 MySQL 的递归查询(Recursive Query)。下面是一个示例
时间: 2024-02-01 16:14:15 浏览: 63
javascript如何用递归写一个简单的树形结构示例
假设我们有两个表,一个是员工表(employee),包含员工的 ID 和姓名;另一个是员工关系表(employee_relation),包含员工之间的直接上下级关系。
我们的目标是将这些数据形成一棵树结构,以便于查询某个员工的所有下属。
下面是使用 MySQL 的递归查询实现这个目标的示例:
```mysql
WITH RECURSIVE subordinates AS (
SELECT id, name, NULL AS manager_id, 0 AS level
FROM employee
WHERE name = 'John Doe'
UNION ALL
SELECT e.id, e.name, r.manager_id, s.level + 1
FROM employee e
JOIN employee_relation r ON e.id = r.employee_id
JOIN subordinates s ON r.manager_id = s.id
)
SELECT id, name, level
FROM subordinates
ORDER BY level, name;
```
这个查询使用了一个递归的 Common Table Expression(CTE)来遍历员工关系,以及他们的上下级关系。首先,我们选择了一个起始节点(John Doe),并将其作为第一级节点添加到 CTE 中。
然后,在每次递归时,我们查询与当前节点直接相连的下属,并将它们作为下一级节点添加到 CTE 中。我们还传递了当前节点的 ID 和级别,以便于之后的排序和显示。
最终,我们从 CTE 中选择了所有节点的 ID、姓名和级别,并按级别和姓名排序。这样,我们就得到了一个完整的树形结构,以及每个节点的层级关系。
阅读全文