Mysql SQL语法:派生一个列值以更新该列值,该列值占上一列值的值

Mysql SQL语法:派生一个列值以更新该列值,该列值占上一列值的值,mysql,sql,Mysql,Sql,我有一个表,需要用一个从上一条记录的值派生的值更新所有记录 例如,给定三个字段id、lft和rgt,我需要lft作为(((当前id-1)lft)+2)的值,rgt作为((当前id-1)rgt>+2)的值。我的意思是选择lft,其中id=[current id-1]和选择rgt,其中id=[current id-1] 如何用正确的SQL语法表示这一点 假设记录的id为2,则lft将等于3, rgt将等于4 假设记录的id为3, lft将等于5,rgt将等于6 假设记录的id为4,则lft将等于7

我有一个表,需要用一个从上一条记录的值派生的值更新所有记录

例如,给定三个字段
id
lft
rgt
,我需要
lft
作为(((当前
id
-1)
lft
)+2)的值,
rgt
作为((当前
id
-1)
rgt>+2)的值。我的意思是
选择lft,其中id=[current id-1]
选择rgt,其中id=[current id-1]

如何用正确的SQL语法表示这一点

  • 假设记录的
    id
    2
    ,则
    lft
    将等于
    3
    rgt
    将等于
    4
  • 假设记录的
    id
    3
    lft
    将等于
    5
    rgt
    将等于
    6
  • 假设记录的
    id
    4
    ,则
    lft
    将等于
    7
    rgt
    将等于
    8
因此,简单的算术运算(例如,考虑
id
的值)将不容易计算
lft
rgt
的值

谢谢

马特

[更新]


这是
MySQL 5.1.52

您还没有说您希望具有最低id的记录的值是什么

如果希望最低id的值保持不变(或当没有
id-1
记录时),可以使用子查询、
按顺序
合并
更新

UPDATE t SET lft = COALESCE((SELECT lft FROM t t2 WHERE t2.id = t.id - 1) + 2, lft),
  rgt = COALESCE((SELECT rgt FROM t t2 WHERE t2.id = t.id - 1) + 2, rgt)
ORDER BY t.id ASC

不能
更新t SET lft=2*id-1,rgt=2*id
就足够了吗?你能发布一些样本数据和预期结果吗?对于id最低的记录呢?Benoit,看起来是这样,即使考虑到id最低的
id
1
)。简单的数学D如果你把它写下来作为答案,我会记下来的。