按顺序用数组的值更新列

Update column with values of array sequentially

我有一个 table,我向其中添加了一个新列 'color'。现在我想更新所有现有行,使其具有三种颜色('#F00'、'#0F0'、'#00F')中的一种并按顺序排列。

所以第一行是#F00,第二行是#0F0,第三行是#00F,第四行也是#F00,依此类推

像这样:

UPDATE table_name SET color = oneOf(['#F00', '#0F0', '#00F']);

如何实现?

如果你的MariaDB版本支持window功能,你可以尝试使用顺序列(在我的示例代码中是ID列)代表你顺序更新的顺序

然后用CASE WHEN表达式&MOD函数判断更新逻辑

UPDATE
    table_name AS t
INNER JOIN
    ( 
      SELECT Id, 
             row_number() OVER (ORDER BY Id) AS rn 
      FROM table_name
    ) AS sub
ON  t.Id = sub.Id
SET color = (CASE WHEN MOD(rn,3) = 1 THEN '#F00'
                 WHEN MOD(rn,3) = 2 THEN '#0F0'
                 ELSE '#00F' END)

sqlfiddle