mysql - 按 ID 移位更新表

标签 mysql set insert-update

我希望用新列更新表格,同时引用另一列中的前一行。

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/

相关文章:

mysql - SQL 查询过滤器,如果

MySQL : One database for all users or multiple databases for each user

mysql - 如何在mysql中插入多行

mysql - 通过加入获取未读计数

MySQL 交换值(不在字段之间)

Python检查集合列表是否包含项目

c++ - 对相当大的整数的大集合的操作的快速实现

linq - 为什么空集的总和为空?

php mysql更新不存在的记录

php - 更新语句不起作用,以及如何将两个语句包装在一个 mysql 查询中