mysql - 如何将列数据移动到下一行直到从指定键开始结束

标签 mysql

我有一个名为 network_table 的表,其中包含以下数据示例:

NetworkTableID, MainID, UserID
1, 1, 1
2, 1, 2
3, 1, 3
4, 1, 4
5, 2, 5

所以我想将 UserID 的所有列数据移动到从 NetworkTableID: 2 开始的下一行,直到表的末尾,并且由于行移动了,还会插入另一行。我期待这样的结果:

NetworkTableID, MainID, UserID
1, 1, 1
2, 1, 2
3, 1, 2
4, 1, 3
5, 2, 4
6, 2, 5

这个查询对我不起作用。它给我一个“#1093 - 您无法在 FROM 子句中指定用于更新的目标表 'network_table'”错误。

UPDATE network_table
SET UserID = (SELECT UserID FROM network_table as nt2
              WHERE nt2.NetworkTableID=network_table.NetworkTableID-1)
WHERE network_table.NetworkTableID > 2

注意:UserID 列是唯一键。

最佳答案

要维护最后一个字段(如果需要)保存副本:

INSERT INTO network_table (MainID,UserID)
SELECT MainID,UserID FROM network_table ORDER BY NetworkTableID DESC LIMIT 1;

然后更新表格:

UPDATE network_table
left join network_table as nt2 on nt2.NetworkTableID=network_table.NetworkTableID-1
SET network_table.UserID =  nt2.UserID
WHERE network_table.NetworkTableID > 2

关于mysql - 如何将列数据移动到下一行直到从指定键开始结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49091296/

相关文章:

mysql - 授予所有语法

php - 如何从不同的表中回显值?

php - 无法使用多个$mysqli->prepare将数据插入mysql

PHP - 将 MySQL 表导出到 JSON 文件

mysql - 哪个最快? SELECT SQL_CALC_FOUND_ROWS FROM `table` 或 SELECT COUNT(*)

mysql - SQL 仅在以下情况下插入

MySQL,如何重用分组中的计算数据

php - 无法通过 PHP 函数设置下拉框中的选定值

MySQL - INSERT 查询需要很长时间

php - 获得连接表 Yii 2 的值(value)