簡體   English   中英

在 postgresql 中基於數組搜索更新列

[英]Update column based on array search in postgresql

id | name                   | status
---+------------------------+--------------------------------
1  | {'Tom','Jerry','Hary'} | { 'Waiting','Waiting',Waiting'}

我想根據名稱更新狀態列。

例如,我想將名稱“Hary”的狀態列更新為“到達”

id | name                   | status
---+------------------------+--------------------------------
1  | {'Tom','Jerry','Hary'} | { 'Waiting',Waiting','Arrived'}

注意:我可以通過使用以下查詢來實現。 但我不想使用索引定位。 有沒有其他方法可以達到上述結果?

UPDATE table
SET status[3] = 'Arrived'
WHERE name[3]='Hary'

正如 S-Man 所評論的,您應該只修復您的數據模型並將每個名稱/狀態存儲在單獨的記錄中。

否則,您可以使用array_position()

update table set status[ array_position(name, 'Harry') ] = 'Arrived'
where 'Harry' = any(name)

GMB 已經向您展示了如何做,但我認為您還應該看到標准化的設計(以防萬一您不知道它會是什么樣子):

Name table
-----------
id     int
name   varchar(70)

Status table
------------
id     int
status varchar(100)

namestatus table
----------------
nameid   int
statusid int

數據

name table
1 Tom
2 Jerry
3 Hary

status table
1 Waiting
2 Arrived

namestatus table
1    1
2    1
3    1

更新聲明

UPDATE namestatus
set statusid = 2 
where nameid = 3

暫無
暫無

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

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