Postgresql:使用 JSON 输入更新多行
Postgresql: Update multiple rows using JSON input
我正在尝试更新 table
中存在的多行
样本输入JSON:i_data
i_data = {
"odId":"test",
"key":"dample",
"items":[{
item_id: 1
quantity : 10,
statusId : 10
},
{
item_id: 2
quantity : 10,
statusId : 10
}]
}
更新查询 - 需要更改的地方
UPDATE vw_item_status_detail vis
SET
quantity = (jst->>'quantity')::numeric,
status_id = (jst->>'statusId')::numeric
FROM
jsonb_array_elements(i_data -> 'items') as jst
WHERE
jst->>'itemId' = vis.item_id;
努力更新!!! 解决方案已编辑
在需要更新的地方插入查询
出现错误:用作表达式的子查询返回多于一行
INSERT INTO item (
fulfiller_id,
item_id,
order_id,
status_id,
sku_code,
decoration_technology,
quantity,
created_time)
SELECT
i_data->>'fulfillerId' fulfillerId,
t->>'itemId' itemId,
i_data->>'orderId' orderId,
1000,
t->>'skuCode' skuCode,
t->>'decorationTechnology' decorationTechnology,
(t->>'quantity')::numeric quantity ,
NOW()
FROM jsonb_array_elements(i_data -> 'items') t
WHERE
NOT EXISTS (
select vd.item_id FROM vw_item_status_detail vd WHERE vd.item_id = t->>'itemId'
);;
正在处理插入查询!!! 解决方案已编辑
UPDATE vw_item_status_detail vis
SET
quantity = (jst->>'quantity')::numeric,
status_id = (jst->>'statusId')::numeric
FROM
jsonb_array_elements(i_data -> 'items') as jst
WHERE
jst->>'itemId' = vis.item_id;
INSERT INTO item (
fulfiller_id,
item_id,
order_id,
status_id,
sku_code,
decoration_technology,
quantity,
created_time)
SELECT
i_data->>'fulfillerId' fulfillerId,
t->>'itemId' itemId,
i_data->>'orderId' orderId,
1000,
t->>'skuCode' skuCode,
t->>'decorationTechnology' decorationTechnology,
(t->>'quantity')::numeric quantity ,
NOW()
FROM jsonb_array_elements(i_data -> 'items') t
WHERE
NOT EXISTS (
select vd.item_id FROM vw_item_status_detail vd WHERE vd.item_id = t->>'itemId'
);;
在 postgresql 中对视图进行更新插入的工作解决方案
我正在尝试更新 table
中存在的多行样本输入JSON:i_data
i_data = {
"odId":"test",
"key":"dample",
"items":[{
item_id: 1
quantity : 10,
statusId : 10
},
{
item_id: 2
quantity : 10,
statusId : 10
}]
}
更新查询 - 需要更改的地方
UPDATE vw_item_status_detail vis
SET
quantity = (jst->>'quantity')::numeric,
status_id = (jst->>'statusId')::numeric
FROM
jsonb_array_elements(i_data -> 'items') as jst
WHERE
jst->>'itemId' = vis.item_id;
努力更新!!! 解决方案已编辑
在需要更新的地方插入查询 出现错误:用作表达式的子查询返回多于一行
INSERT INTO item (
fulfiller_id,
item_id,
order_id,
status_id,
sku_code,
decoration_technology,
quantity,
created_time)
SELECT
i_data->>'fulfillerId' fulfillerId,
t->>'itemId' itemId,
i_data->>'orderId' orderId,
1000,
t->>'skuCode' skuCode,
t->>'decorationTechnology' decorationTechnology,
(t->>'quantity')::numeric quantity ,
NOW()
FROM jsonb_array_elements(i_data -> 'items') t
WHERE
NOT EXISTS (
select vd.item_id FROM vw_item_status_detail vd WHERE vd.item_id = t->>'itemId'
);;
正在处理插入查询!!! 解决方案已编辑
UPDATE vw_item_status_detail vis
SET
quantity = (jst->>'quantity')::numeric,
status_id = (jst->>'statusId')::numeric
FROM
jsonb_array_elements(i_data -> 'items') as jst
WHERE
jst->>'itemId' = vis.item_id;
INSERT INTO item (
fulfiller_id,
item_id,
order_id,
status_id,
sku_code,
decoration_technology,
quantity,
created_time)
SELECT
i_data->>'fulfillerId' fulfillerId,
t->>'itemId' itemId,
i_data->>'orderId' orderId,
1000,
t->>'skuCode' skuCode,
t->>'decorationTechnology' decorationTechnology,
(t->>'quantity')::numeric quantity ,
NOW()
FROM jsonb_array_elements(i_data -> 'items') t
WHERE
NOT EXISTS (
select vd.item_id FROM vw_item_status_detail vd WHERE vd.item_id = t->>'itemId'
);;
在 postgresql 中对视图进行更新插入的工作解决方案