簡體   English   中英

基於PostgreSQL中的varchar數組更新表的列

[英]Update column of a table based on array of varchar in PostgreSQL

我有一個表,我在該表中添加了列varchar顏色代碼。

該表已經有很多行。 添加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列,但是我不知道如何訪問基於索引的數組元素。

運行更新語句后,我的預期輸出是

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 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連接起來,以存儲該顏色代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM