我正在迁移一个项目,该项目集成了遍历树,最初是在MySQL数据库之上编写的。
下面的查询用于移动三者中的节点,并且在MySQL中工作正常。我在树中有两个测试节点,在根级别(0深度)和移动第二个元素成为第一个元素的子节点。
现在我需要在PostgreSQL 9.6上运行它,我在转换以下查询时遇到了麻烦:
UPDATE treeitems
SET
depth = depth + IF(@subtree := lft >= 3 AND rgt <= 4, ( 1 - 0 ) , 0),
lft = lft + IF(@subtree, -1, IF(lft >= 2, 2, 0)),
rgt = rgt + IF(@subtree, -1, IF(rgt <= 4, 2, 0))
WHERE
rgt >= 2
AND
lft <= 4
我能够转换成这样的东西,但它没有解决错误的分配(@subtree:=):
UPDATE treeitems
SET
depth = depth + @subtree := (CASE WHEN lft >= 3 AND rgt <= 4 THEN ( 1 - 0 )
ELSE 0 END),
lft = lft + CASE WHEN @subtree THEN -1 ELSE (CASE WHEN lft >= 2 THEN 2 ELSE
0 END) END,
rgt = rgt + CASE WHEN @subtree THEN -1 ELSE (CASE WHEN rgt <= 4 THEN 2 ELSE
0 END)END
WHERE
rgt >= 2
AND
lft <= 4