根据 PostgreSQL 中的 varchar 数组更新 table 的列

Update column of a table based on array of varchar in PostgreSQL

我有一个 table,我在其中添加了一个列 varchar 颜色代码。

table 已经有很多行。添加颜色代码列后 table 的状态为

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"]

对于 table 中的每一行,我必须通过将数组索引与 (row_number() - 1) 匹配来更新颜色代码列。

我在使用 "in" 子句时处理了值列表。

示例:

select * from table where id in(1,2,3,4) etc

这里的 1,2,3,4 只是一个数组

我想更新类似行上的颜色代码列,但我不知道如何访问基于索引的数组元素。

在 运行 更新语句之后我的预期输出是

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

您可以按如下方式进行。我假设你的 table 叫做 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)中,为table中的每条记录检索行号。然后在中间查询 (middle) 中,该行号用于从文本元素的内联数组中获取相应的颜色代码。最后,更新语句通过其 id 再次将该结果与 table t 连接起来,以存储该颜色代码。