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如果你把它写下来作为答案,我会记下来的。