首页 > 解决方案 > 基于postgresql中的数组搜索更新列

问题描述

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

我想根据名称更新状态列。

例如,我想将名称“Hary”的状态列更新为“Arrived”

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

注意:我可以通过使用以下查询来实现。但我不想使用索引定位。有没有其他方法可以达到上述结果?

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

标签: sqlarrayspostgresql

解决方案


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

否则,您可以使用array_position()

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

推荐阅读