sql写一个树形查询
时间: 2023-07-13 18:15:13 浏览: 74
用SQL实现树的查询
树形查询可以使用递归查询来实现。假设我们有一个表`tree`,它的结构如下:
```
id name parent_id
1 A NULL
2 B 1
3 C 1
4 D 2
5 E 2
6 F 3
```
其中`id`是节点的唯一标识,`name`是节点的名称,`parent_id`是节点的父节点标识。如果某个节点没有父节点,则`parent_id`为NULL。
下面是一个递归查询的示例,可以查询出整个树形结构:
```
WITH RECURSIVE tree_path(id, name, path) AS (
SELECT id, name, name as path FROM tree WHERE parent_id IS NULL
UNION ALL
SELECT t.id, t.name, CONCAT(tp.path, ' > ', t.name) as path
FROM tree t JOIN tree_path tp ON t.parent_id = tp.id
)
SELECT * FROM tree_path;
```
上述SQL语句的执行结果将会是:
```
id name path
1 A A
2 B A > B
3 C A > C
4 D A > B > D
5 E A > B > E
6 F A > C > F
```
这里我们使用了`WITH RECURSIVE`语句来定义一个递归查询,`tree_path`是一个递归的公共表表达式。首先,我们从根节点开始查询,即`parent_id`为NULL的节点。然后,我们通过递归连接查询,找到所有子节点,并将它们的路径与父节点的路径拼接起来。最后,我们从递归查询中检索出所有结果。
注意,递归查询可能会消耗大量的数据库资源,因此应该谨慎使用。
阅读全文