我有一个包含多个列的表,其中一个是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初学者,很多命令听起来像是适合工作的命令(更新,插入,选择,更改)。
答案 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