【发布时间】:2013-10-15 16:30:17
【问题描述】:
这是桌子
user_id | parent_id | lft
--------|-----------|-----
1 | | 0
2 | 1 | 0
3 | 1 | 0
4 | 2 | 0
这是一个从节点 1 执行 CTE 并遍历 user_id 1 的所有子节点直到到达叶子并将遍历的子节点 lft 字段的值更新为 1 的查询
WITH RECURSIVE d AS (
SELECT user_id
FROM btrees
WHERE user_id = 1
UNION ALL
SELECT c.user_id
FROM d JOIN btrees c ON c.parent_id = d.user_id
)
UPDATE btrees b set lft = 1
FROM d
WHERE d.user_id = b.user_id
我只是要求一个相反方向的查询..即。从任何节点到根节点,所以我可以更新 lft 的值
【问题讨论】:
-
你有输入输出的例子吗?
-
你到底想更新什么?
-
我想更新 lft 的值(见编辑)
-
lft 的新值应该是什么?孩子的价值总和?
-
lft 的值将来自其他地方,所以我们称之为 x
标签: sql postgresql postgresql-9.1