mysql 三层树结构查询
时间: 2023-06-23 16:45:50 浏览: 94
Mysql之索引分享
MySQL 中的三层树结构查询可以使用多种方式实现,以下是两种常用的方法:
方法一:使用 JOIN 连接查询
假设我们有一个表格叫做 `category`,包含以下字段:
- id:分类 ID
- name:分类名称
- parent_id:父级分类 ID
我们可以使用下面的 SQL 查询来获取三层树结构:
```
SELECT parent.id AS parent_id, parent.name AS parent_name,
child.id AS child_id, child.name AS child_name,
grandchild.id AS grandchild_id, grandchild.name AS grandchild_name
FROM category AS parent
LEFT JOIN category AS child ON child.parent_id = parent.id
LEFT JOIN category AS grandchild ON grandchild.parent_id = child.id
WHERE parent.parent_id IS NULL;
```
这个查询使用了两个 `LEFT JOIN` 连接了三次 `category` 表格。首先,我们从 `category` 表格中获取所有没有父级分类的分类,作为根节点。然后,我们使用两个 `LEFT JOIN` 连接子节点和孙子节点。最后,我们筛选出所有三层结构,并将结果返回。
方法二:使用子查询查询
假设我们有一个表格叫做 `category`,包含以下字段:
- id:分类 ID
- name:分类名称
- parent_id:父级分类 ID
我们可以使用下面的 SQL 查询来获取三层树结构:
```
SELECT parent.id AS parent_id, parent.name AS parent_name,
child.id AS child_id, child.name AS child_name,
grandchild.id AS grandchild_id, grandchild.name AS grandchild_name
FROM category AS parent
LEFT JOIN (
SELECT id, name, parent_id
FROM category
) AS child ON child.parent_id = parent.id
LEFT JOIN (
SELECT id, name, parent_id
FROM category
) AS grandchild ON grandchild.parent_id = child.id
WHERE parent.parent_id IS NULL;
```
这个查询使用了两个子查询来连接三次 `category` 表格。首先,我们从 `category` 表格中获取所有没有父级分类的分类,作为根节点。然后,我们使用两个子查询连接子节点和孙子节点。最后,我们筛选出所有三层结构,并将结果返回。
希望这些查询能够帮助到你。
阅读全文