mysql 返回树结构
时间: 2023-06-28 14:11:40 浏览: 91
MySQL 中可以使用递归查询语句来返回树形结构数据。以下是一个简单的例子:
假设有一个表 `category` 存储了商品分类信息,其中包含了 `id`、`name` 和 `parent_id` 三个字段。其中,`id` 表示分类的唯一标识,`name` 表示分类名称,`parent_id` 表示该分类的父级分类 ID,如果该分类是一级分类,则 `parent_id` 为 0。
现在我们要返回该表的树形结构数据,可以使用如下的 SQL 语句:
```
WITH RECURSIVE cte AS (
SELECT id, name, parent_id, 0 AS level
FROM category
WHERE parent_id = 0
UNION ALL
SELECT c.id, c.name, c.parent_id, level + 1
FROM category c
INNER JOIN cte ON c.parent_id = cte.id
)
SELECT id, name, parent_id, level
FROM cte
ORDER BY id;
```
上述 SQL 语句中使用了 `WITH RECURSIVE` 语法来定义一个递归查询的公共表表达式(CTE)。CTE 中的第一个 SELECT 语句用于获取所有的一级分类,即 `parent_id` 为 0 的分类。然后,使用 UNION ALL 连接这个 SELECT 语句和一个递归查询,递归查询中使用 INNER JOIN 连接 CTE 和 category 表,以获取每个分类的父级分类信息。
最终,查询语句使用 CTE 中定义的字段来返回树形结构数据。其中,`level` 表示当前分类在树形结构中的层级。最后,使用 ORDER BY 对查询结果按照 `id` 排序。
注意,上述 SQL 语句中使用了递归查询,可能会导致性能问题,特别是在数据量较大的情况下。因此,使用递归查询时需要谨慎考虑性能问题。
阅读全文