在PostgreSQL中基于varchar数组更新表的列
我在一个表中添加了一列varchar colorcode 该表已经有许多行。添加colorcode列后的表状态为在PostgreSQL中基于varchar数组更新表的列,sql,postgresql-9.1,Sql,Postgresql 9.1,我在一个表中添加了一列varchar colorcode 该表已经有许多行。添加colorcode列后的表状态为 id name location colorcode 121 Royal Challengers Bangalore 122 Sun Risers Hyderabad 123 Dare Devils Delhi 124 Gujrat Lions Ahmadabad 我有一系列的色码
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"]
对于表中的每一行,我必须通过将数组的索引与行编号-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,您可以按如下方式操作。我假设您的表名为t:
在最内部的查询基中,为表中的每条记录检索行号。然后在中间查询中间,行号用于从文本元素的行数组中提取相应的颜色代码。最后,update语句通过其id再次将该结果与表t连接起来,以便存储该颜色代码 更新的预期结果是什么?为什么需要参考上一行?先前的定义是什么?您可以根据哪个属性对行进行排序?您的问题,并添加一些样本数据和预期结果格式化文本请,我已经编辑了问题,并添加了更新的预期结果。我不需要参考前一行。行数-1是为了确保与数组索引相对应的颜色代码行数是基于1的,数组索引是基于0的。我这样认为是为了补偿我正在做的行数-1。您可以根据以下内容对行进行排序:id@curiosa,这解决了你的问题吗?你能给我一些反馈吗?很抱歉回复太晚,回答得很好@trincot这正是我想要的
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;