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

时间:2018-03-04 02:20:27

标签: 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 - 您无法指定目标表' network_table'用于FROM子句中的更新"错误。

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列是UNIQUE键。

1 个答案:

答案 0 :(得分:0)

如果需要,保留最后一个字段保存副本:

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