我以json格式获取一些数据。
jsonData json;
jsonData = '[{
"id": 1,
"text": "Materials and varieties",
"parent": "0"
}, {
"id": 2,
"text": "Bricks",
"parent": "1"
}, {
"id": "new_1",
"text": "newitem",
"parent": "1"
}
]';
是否可以根据jsonData的id字段对表字段进行更新。
我想做点什么
UPDATE item_table SET active = 'N' WHERE
item_id NOT IN ((jsonData ->>'id')::INTEGER) ;
我还想通过不允许与模式匹配的ID来限制jsonData' new _%'。
我正在使用Postgres 9.3
答案 0 :(得分:2)
我可能做得有点过于复杂,但至少你可以这样得到ID:
select id::int from (select (json_array_elements('[{
"id": 1,
"text": "Materials and varieties",
"parent": "0"
}, {
"id": 2,
"text": "Bricks",
"parent": "1"
}, {
"id": "new_1",
"text": "newitem",
"parent": "1"
}
]'::json))->>'id' as id) a where id not like 'new_%';
当然,更好的检查是测试id是否实际上是数字,但如果你知道它是数字还是new_,那么这也有效。
因此,只需将其添加到update ... where in ...
,即可使用JSON ID。