我有一个表,我已经添加了一个列varchar colorcode。
该表已有很多行。添加colorcode列后的表状态为
id name location colorcode
121 Royal Challengers Bangalore
122 Sun Risers Hyderabad
123 Dare Devils Delhi
124 Gujrat Lions Ahmadabad
我有一系列颜色代码
["#FF8484", "#FF82A9", "#FA82FF", "#C682FF", "#8782FF"]
对于表中的每一行,我必须通过匹配数组索引(row_number() - 1)来更新colorcode列。
使用“in”子句时,我处理了值列表。
示例:
select * from table where id in(1,2,3,4) etc
这里1,2,3,4只不过是一个数组
我想在类似的行上更新colorcode列,但我不知道如何根据索引访问我的数组元素。
运行update语句后我的预期输出是
id name location colorcode
121 Royal Challengers Bangalore #FF8484
122 Sun Risers Hyderabad #FF82A9
123 Dare Devils Delhi #FA82FF
124 Gujrat Lions Ahmedabad #C682FF
我可以根据id,即主键
对结果进行排序注意:我正在使用Postgres
答案 0 :(得分:2)
你可以这样做。我假设您的表名为 t :
update t
set colorcode = middle.cc
from (
select id, ('{#FF8484,#FF82A9,#FA82FF,#C682FF,#8782FF}'::text[])[rn] as cc
from (select id, row_number() over (order by id) as rn from t) as base
where rn <= 5
) as middle
where middle.id = t.id;
在最内层查询( base )中,将为表中的每条记录检索行号。然后在中间查询( middle )中,该行号用于从文本元素的内联数组中获取相应的颜色代码。最后,update语句通过 id 再次将该结果与表 t 连接起来,以存储该颜色代码。