mysql递归查询完整示例
时间: 2023-06-21 14:14:31 浏览: 97
假设我们有一个表格 `categories`,包含 `id` 和 `parent_id` 两列,用于存储分类信息。其中 `parent_id` 表示当前分类的父分类的 `id` 值,如果当前分类为一级分类,则 `parent_id` 为 null。
现在我们需要通过递归查询获取某个分类的所有子分类。可以使用以下 SQL 查询语句:
```sql
WITH RECURSIVE cte AS (
SELECT id, name, parent_id, 0 AS level
FROM categories
WHERE id = 1 -- 查询 id 为 1 的分类及其所有子分类
UNION ALL
SELECT c.id, c.name, c.parent_id, level + 1
FROM categories c
INNER JOIN cte ON c.parent_id = cte.id
)
SELECT id, name, parent_id, level
FROM cte;
```
这个查询语句使用了 MySQL 的递归查询语法 `WITH RECURSIVE`,创建了一个名为 `cte` 的递归公用表表达式。
首先,在 `cte` 中选择了当前分类的基本信息,包括 `id`、`name`、`parent_id` 和 `level`(初始值为 0)。这里的 `id` 为查询条件,表示从该分类开始递归查询。
接下来,在 `cte` 的基础上再次查询分类信息,使用 `INNER JOIN` 连接 `categories` 表格和 `cte` 表格,通过 `c.parent_id = cte.id` 条件筛选出与当前分类关联的子分类。并且将 `level` 值加 1,表示当前分类为上一个分类的子分类,层级加 1。
最后,在 `cte` 中选择所有查询到的分类信息,包括 `id`、`name`、`parent_id` 和 `level`。
通过这个查询语句,我们可以递归查询到某个分类的所有子分类,并且显示出每个分类的层级关系。
阅读全文