基于PostgreSQL中的数组搜索更新列

时间:2019-12-10 15:19:09

标签: sql arrays 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'

2 个答案:

答案 0 :(得分:2)

如S-Man所述,您应该修复数据模型并将每个名称/状态存储在单独的记录中。

否则,您可以使用array_position()

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

答案 1 :(得分:0)

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