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

时间:2016-04-30 07:14:09

标签: 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

我有一系列颜色代码

 ["#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

1 个答案:

答案 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 连接起来,以存储该颜色代码。