我希望用新列更新表格,同时引用另一列中的前一行。
ID | Fruit | Fruit_prev |
-------------------------
1 | Apple | |
2 | Orange | Apple |
3 | Banana | Orange |
4 | Lemon | Banana |
原始表中不存在 Fruit_prev,我正在尝试使用 UPDATE 列添加它。
我的想法围绕着这个:
UPDATE table SET Fruit_prev = (SELECT Fruit WHERE ID = ID-1);
然而,这在 MYSQL 中不起作用。
实现此目标的最佳方法是什么?
最佳答案
默认 ID 更新:
UPDATE FruitTable AS ft
INNER JOIN FruitTable AS ft2
ON ft.ID - 1 = ft2.ID
SET ft.Fruit_prev = ft2.Fruit
UPDATE +1 移动任何列(这里是日期列):
UPDATE
Fruit as t0
INNER JOIN
(SELECT ft.*,
@rownum := @rownum + 1 AS rank
FROM Fruit ft,
(SELECT @rownum := 0) r
ORDER BY Date) AS t1
INNER JOIN
(SELECT ft.*,
@rownum2 := @rownum2 + 1 AS rank
FROM Fruit ft,
(SELECT @rownum2 := 0) r
ORDER BY Date) AS t2
ON t0.Id = t1.Id AND t1.rank - 1= t2.rank
SET t0.FruitPrev = t2.Fruit;
这里连接了三个表。第一个是默认的,因此它可以更新,第二个和第三个按 Date
添加排名,因此它们可以按 rank
字段移动 +1。
关于mysql - 按 ID 移位更新表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28291707/