PostgreSQL:更新jsonb类型内部数组中TL员工薪资的SQL语句
批量更新JSONB数组中指定职位员工的薪资
针对需求,这里提供适用于PostgreSQL的SQL语句(因使用jsonb类型),可批量将employee_data字段内employees数组中职位为TL的员工薪资统一更新为20000:
UPDATE your_table_name SET employee_data = jsonb_set( employee_data, '{employees}', ( SELECT jsonb_agg( CASE WHEN emp->>'desig' = 'TL' THEN emp || '{"sal": 20000}'::jsonb ELSE emp END ) FROM jsonb_array_elements(employee_data->'employees') AS emp ) ) WHERE employee_data @> '{"employees": [{"desig": "TL"}]}';
语句说明:
- 拆分与处理元素:用
jsonb_array_elements将employees数组拆分为单个JSON对象,通过CASE判断对象的desig是否为TL,匹配时用||合并新薪资值,不匹配则保留原对象。 - 重新聚合数组:通过
jsonb_agg将处理后的单个对象重新组合为完整的employees数组。 - 替换原字段:用
jsonb_set把原employee_data中的employees数组替换为处理后的新数组。 - 过滤目标记录:
WHERE子句仅筛选包含TL职位员工的记录,避免无效更新。
注意:请将语句中的
your_table_name替换为你的实际表名。
内容的提问来源于stack exchange,提问作者sreekesh.s
相关产品推荐
相关产品推荐

