将MySQL查询转换为Postgres 9.6 - 条件和赋值问题

时间:2017-11-13 16:07:48

标签: mysql postgresql tree-traversal

我正在迁移一个项目,该项目集成了遍历树,最初是在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

0 个答案:

没有答案