按顺序用数组的值更新列
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)
我有一个 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)