在PostgreSQL中基于varchar数组更新表的列

在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 我有一系列的色码

我在一个表中添加了一列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"]
对于表中的每一行,我必须通过将数组的索引与行编号-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;