sql树形结构查询 加条件 name是测试 然后获取到他的父节点和对应的子节点
时间: 2024-03-17 12:45:40 浏览: 86
假设你有一个名为`tree`的表,它有三个字段:`id`、`name`和`parent_id`,其中`id`是节点的唯一标识符,`name`是节点名称,`parent_id`是父节点的`id`。你可以使用以下SQL查询语句获取名为“测试”的节点及其父节点和子节点:
```
WITH RECURSIVE cte (id, name, parent_id, depth, path) AS (
SELECT id, name, parent_id, 0, CAST(id AS CHAR(200))
FROM tree
WHERE name = '测试'
UNION ALL
SELECT tree.id, tree.name, tree.parent_id, cte.depth + 1, CONCAT(cte.path, ',', tree.id)
FROM tree
JOIN cte ON tree.parent_id = cte.id
)
SELECT DISTINCT cte1.id, cte1.name AS node_name, cte2.name AS parent_name, cte3.name AS child_name
FROM cte cte1
LEFT JOIN cte cte2 ON cte1.parent_id = cte2.id
LEFT JOIN cte cte3 ON FIND_IN_SET(cte3.id, cte1.path)
WHERE cte1.name = '测试';
```
这个查询语句使用了递归CTE(Common Table Expression)来遍历树形结构,并使用`LEFT JOIN`和`FIND_IN_SET`函数来获取父节点和子节点。其中`cte1`是名为“测试”的节点,`cte2`是它的父节点,`cte3`是它的子节点。
阅读全文