写一个MySQL递归查询,previous_id表是当前节点,next_id表示父节点,查询字段为节点、父节点、最远祖先节点
时间: 2023-11-27 13:49:06 浏览: 86
MySQL递归查询树状表的子节点、父节点具体实现
5星 · 资源好评率100%
假设表名为`my_table`,包含三个字段:`node`、`previous_id`、`next_id`,可以使用MySQL的递归查询语法`WITH RECURSIVE`来实现:
```sql
WITH RECURSIVE cte AS (
SELECT node, previous_id, next_id, node AS ancestor
FROM my_table
WHERE previous_id IS NULL
UNION ALL
SELECT t.node, t.previous_id, t.next_id, cte.ancestor
FROM my_table t
JOIN cte ON t.previous_id = cte.node
)
SELECT node, previous_id, ancestor
FROM cte
ORDER BY node;
```
以上SQL语句通过递归查询,获取每个节点的最远祖先节点,并将结果按照节点从小到大排序。其中,`cte`是递归查询的临时表,初始查询是找到没有`previous_id`的节点,然后通过`UNION ALL`与子查询建立递归关系,直到找到所有节点的祖先节点。`ORDER BY`语句是为了按照节点从小到大排序输出结果。
阅读全文