我有两个列的表调用question
,它包含超过160K行,例如:
id | questionID
1 | 1
2 | 2
3 | 3
4 | 4
5 | 5
6 | 6
7 | 7
8 | 8
9 | 9
10 | 10
...
我想更新questionID列,以便它看起来像下面的示例。对于每x个行,需要更新以再次从1开始设置。最终结果应该是这样的:
id | questionID
1 | 1
2 | 2
3 | 3
4 | 4
5 | 1
6 | 2
7 | 3
8 | 4
9 | 1
10 | 2
...
该表包含许多行,因此它不是手动选项。 什么是最简单的更新表格的方法? 任何帮助将不胜感激。感谢
答案 0 :(得分:2)
如果您打算使用模数运算符。 SQL Server和MySQL都支持%
:
UPDATE question
SET questionID = 1 + ((id - 1) % 4);
如果数字有差距,那么你需要做一些不同的事情。在这种情况下,解决方案依赖于数据库。
答案 1 :(得分:1)
只需使用模运算符:
UPDATE question
SET questionID = CASE WHEN id % 4 = 0 THEN 4 ELSE id % 4 END
或者,如果id
有差距并且您使用的是SQL Server ,那么您可以使用它:
UPDATE q1
SET id = (CASE WHEN q2.rn % 4 = 0 THEN 4 ELSE q2.rn % 4 END)
FROM question q1
INNER JOIN (
SELECT id, ROW_NUMBER() OVER (ORDER by id) AS rn
FROM question ) q2 ON q1.ID = q2.ID
答案 2 :(得分:0)
UPDATE question SET questionID = questionID % 4 + 1