如何更新JSONB列的值来自另一个表列在PostgreSQL

0

的问题

我有一个来源表,其中列出如下:

公众。来源

Id | part_no | category
1 | 01270-4 | Landscape
2 | 01102-3 | Sports

然后,我们的目标表jsonb塔(合并),其中列表如下:

公众。目标

Id | part_no | combinations
7 | 01270-4 | {"subject":""}
8 | 01102-3 | {"subject":""}

我的问题-我怎么可以更新目标表jsonb列(组合)的价值观来源表使用的part_no列?
产出,如:

Id | part_no | combinations
7 | 01270-4 | {"subject":"Landscape"}
8 | 01102-3 | {"subject":"Sports"}

我想下面但给人错误:

UPDATE public.target t
SET combinations = jsonb_set(combinations,'{subject}','s.category',false)
FROM public.source s
WHERE s.part_no = t.part_no;

错误:无效输入的语法型json 2线:组=jsonb_set(组合,'{受}','s。的类别... ^ 详细信息:令牌"s"是无效的。 背景:java,第1行:s... SQL状态:22P02 字:77

jsonb postgresql
2021-11-16 15:03:01
1

最好的答案

1

你应该使用 to_jsonb 功能转换 s.category

演示

UPDATE public.target t
SET combinations = jsonb_set(combinations,'{subject}',to_jsonb(s.category),false)
FROM public.source s
WHERE s.part_no = t.part_no

或者您可以使用示例的结构对于加入和更新两个JSON领域:

演示

UPDATE public.target t
SET combinations = combinations || jsonb_build_object('subject', s.category)
FROM public.source s
WHERE s.part_no = t.part_no
2021-11-16 15:26:04

完美! 非常感谢你Pooya. 你是男人!
Bogart

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................