mysql - 如何在 MySQL 中向上移动列的值?

标签 mysql mariadb

这就是我的 table 的样子:

表名称:以下

+----+-------+-------+-------+-------+
| ID | user1 | user2 | user3 | user4 |
+----+-------+-------+-------+-------+
| 1  | user2 | user1 | user2 | user2 |
| 2  | user3 | user3 | user1 | user3 |
| 3  | user4 | user4 | user4 | user1 |
+----+-------+-------+-------+-------+

但是如果更改一个值,例如:

+----+-------+-------+-------+-------+
| ID | user1 | user2 | user3 | user4 |
+----+-------+-------+-------+-------+
| 1  | user2 | user1 | user2 | user2 |
| 2  | user3 | user3 | null  | user3 |
| 3  | user4 | user4 | user4 | user1 |
+----+-------+-------+-------+-------+

如何使值user4(以及低于该值的其他值)上升,并且中间不留有NULL值? 我希望输出为:

+----+-------+-------+-------+-------+
| ID | user1 | user2 | user3 | user4 |
+----+-------+-------+-------+-------+
| 1  | user2 | user1 | user2 | user2 |
| 2  | user3 | user3 | user4 | user3 |
| 3  | user4 | user4 | null  | user1 |
+----+-------+-------+-------+-------+

我厌倦了这个查询:

UPDATE following t1
LEFT OUTER JOIN following t2 ON T1.user3+1=T2.user3 - 2
SET t1.user3 = t2.user3;

但我收到一些错误错误代码 1,292,SQLState 22007] 截断不正确的 DOUBLE 值:user2

最佳答案

我不知道mysql中的查询是如何编写的,但是这里有一个方法可以实现它。

拳头:

You show get the Min(ID) and Max(ID).

第二:

编写一个循环 For i = Min(ID) to Max(ID)

第三:

Update Following set user3 = (Select user3 from Following where ID = i+1) where ID = i 

第四:

Set the last one row data to null or something else what you want init.

关于mysql - 如何在 MySQL 中向上移动列的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43832661/

相关文章:

mariadb.service : Failed to set up mount namespacing: Permission denied/Failed at step NAMESPACE spawning

mysql - 主从服务器上的位置未更新

php - 使用 mysql 和 php 将用户链接到设备

mysql - 为什么 <> 'null' 在 MySQL 中有效?

mysql - SQL - 查询关联 3 个不同的表和一个弱实体

mysql - 如何在 mysql 中使用全文搜索而不使用特殊标签(<html>、<p> 等)

c# - dbup 不会自动创建 schemaversions 表

mysql - 获取确实引用值列表但同时不引用其他值列表的行

mysql - MariaDB:如何将表名存储到变量中?

mysql - MariaDB 更新表 IF x null 然后更新 x 否则更新 y