mysql 递归查询
时间: 2023-06-21 22:07:21 浏览: 65
MySQL递归查询
MySQL 支持递归查询,常用于处理树形结构数据。下面是一个简单的示例:
假设我们有一个表 `category` 存储了商品分类的树形结构,表结构如下:
```sql
CREATE TABLE `category` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`parent_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
```
其中,`parent_id` 表示父分类的 ID,根节点的 `parent_id` 为 NULL。
现在我们需要查询某个分类的所有子分类,包括子分类的子分类,以此类推。可以使用 MySQL 的 WITH RECURSIVE 语句来实现递归查询:
```sql
WITH RECURSIVE cte AS (
SELECT id, name, parent_id
FROM category
WHERE id = 1 -- 假设要查询分类 ID 为 1 的所有子分类
UNION ALL
SELECT c.id, c.name, c.parent_id
FROM category c
JOIN cte ON c.parent_id = cte.id
)
SELECT id, name, parent_id FROM cte;
```
上述语句中,我们使用了一个 Common Table Expression(CTE)名为 `cte`,其中第一个 SELECT 语句为递归的起始条件,查询分类 ID 为 1 的分类信息。接着使用 UNION ALL 将递归查询的结果与分类表连接,直到没有更多子分类为止。
最终查询语句输出的结果为所有子分类的 ID、名称和父分类的 ID。
阅读全文