2012-03-06 38 views
0

我有一個表,我需要更新所有記錄與從前一個記錄的值派生的值。SQL語法:派生一個列值爲更新,帳戶的值的前一列值

例如,給定三個字段idlftrgt,我需要lft是(((當前id - 1)的lft)+ 2)的值和rgt爲值(((目前id-1)的rgt)+ 2)。我暗示擁有含義select lft where id=[current id-1]select rgt where id=[current id-1]

如何用適當的SQL語法表達這一點?

  • 鑑於記錄的id2,該lft將等於3, 的rgt將等於4
  • 鑑於記錄的id3, 的lft將等於5,該rgt將等於6
  • 鑑於記錄的id4,將lft將等於7, 的rgt將等於8

那麼簡單的算術運算(考慮到id值,例如)不會輕易佔lftrgt值。

謝謝,

馬特

[更新]

這是MySQL 5.1.52

+2

不能'UPDATEŧ SET lft = 2 * id - 1,rgt = 2 * id'是否足夠? – Benoit 2012-03-06 17:08:10

+0

你可以發佈一些樣本數據和預期的結果嗎? – Taryn 2012-03-06 17:08:48

+0

那麼最低ID的記錄呢? – 2012-03-06 17:29:57

回答

0

你還沒有說過你想要的值是最低id的記錄。

如果您希望這些值是最低的ID不變(或者當沒有id - 1記錄),你可以UPDATE,使用子查詢,ORDER BYCOALESCE

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 
相關問題