mysql二维表格转树 如何写sql
时间: 2024-03-11 12:47:55 浏览: 66
全国学校数据表格加mysql数据库.rar
将二维表格转为树形结构的 SQL 查询语句,可以使用 MySQL 的 WITH RECURSIVE 语句实现。
假设我们有一个名为 `category` 的表格,包含以下字段:
- `id`: 分类 ID
- `name`: 分类名称
- `parent_id`: 父级分类 ID
首先,需要从 `category` 表格中选出所有的根节点,即 `parent_id` 为 NULL 或 0 的记录,作为递归查询的起点。这可以通过以下查询语句实现:
```
WITH RECURSIVE category_tree AS (
SELECT id, name, parent_id, 0 AS level
FROM category
WHERE parent_id IS NULL OR parent_id = 0
UNION ALL
SELECT c.id, c.name, c.parent_id, ct.level + 1
FROM category c
JOIN category_tree ct ON c.parent_id = ct.id
)
SELECT * FROM category_tree;
```
上面的查询语句中,我们定义了一个名为 `category_tree` 的递归表格,初始记录集合为 `SELECT id, name, parent_id, 0 AS level FROM category WHERE parent_id IS NULL OR parent_id = 0`,即选出所有的根节点,并为它们设置初始层级为 0。
接着,我们使用 `UNION ALL` 连接递归表格和 `category` 表格,以便逐层向下递归。在递归表格中,我们通过 `JOIN` 和 `ON` 子句将当前层级的记录与上一层级的记录连接起来,以便获取当前层级的子节点。同时,我们将上一层级的层级数加一,作为当前层级的层级数。
最后,我们从递归表格 `category_tree` 中选出所有记录,即可得到树形结构的数据。
注意:在使用 WITH RECURSIVE 语句时,必须确保递归表格中至少包含一个初始记录集合,否则会导致无限递归。
阅读全文