根据 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 连接起来,以存储该颜色代码。
我有一个 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 连接起来,以存储该颜色代码。