WITH RECURSIVE cte(id, parent_id, root_id) AS ( SELECT id, parent_id, id AS root_id FROM your_table WHERE parent_id IS NULL UNION ALL SELECT t.id, t.parent_id, cte.root_id FROM your_table t JOIN cte ON t.parent_id = cte.id ) SELECT DISTINCT root_id FROM cte WHERE id = child_id;
上述代码中,大家首先通过id为null的节点来确定根节点,并设定根节点的root_id为其本身的id。然后在递归查询中,将每个节点的root_id设定为其父节点的root_id,直到达到最后一个子节点。
在查询时,大家根据给定的child_id找到其所在的节点,并返回该节点的root_id,即为该子节点所在的根节点。