从json中将变量选择到具有现有记录的表的空列中

时间:2019-03-13 13:17:25

标签: sql postgresql

我有一个包含多个列的表,其中一个是jsonb对象。我想从一个json变量中创建一个新列,但update命令将追加到表的底部。

我有:

time    info    id    some_json
12      bla           {"id":"123","more_info":"bla bla"}
13      bla           {"id":"124","more_info":"bla bla"}

我需要:

time    info    id    some_json
12      bla     123   {"id":"123","more_info":"bla bla"}
13      bla     124   {"id":"124","more_info":"bla bla"}

我得到:

time    info    id    some_json
12      bla           {"id":"123","more_info":"bla bla"}
13      bla           {"id":"124","more_info":"bla bla"}
                123
                124

当我使用insert_into my_table(id) select some_json ->> 'id' from my_table;

正确的方法是什么?我是一名SQL初学者,很多命令听起来像是适合工作的命令(更新,插入,选择,更改)。

2 个答案:

答案 0 :(得分:0)

您需要更新而不插入

update my_table
set id= case when time=12 then select some_json ->> 'id' from my_table where time=12
             when time 13 then select some_json ->> 'id' from my_table where time=13 end;

答案 1 :(得分:0)

我认为您正在寻找一个简单的更新声明

update t set id = (some_json->>'id')::int;
                                   --^ cast it to the datatype of id column

Demo