Postgresql:使用JSON输入更新多行
如果表中存在多行,我将尝试更新多行 示例输入JSON:i_数据 更新查询-哪里需要一些更改Postgresql:使用JSON输入更新多行,postgresql,upsert,Postgresql,Upsert,如果表中存在多行,我将尝试更新多行 示例输入JSON:i_数据 更新查询-哪里需要一些更改 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
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中视图上upsert的工作解决方案是否出现错误?可能有错误:列项目\u id不存在?JSON键需要被引用:jst->“item_id”。v1表和select distinct有什么区别?它不应该是jst->“item\u id”=vis.item\u id的位置吗?可能使用::intcast@Schwern我假设问题的一部分是item_id确实存在,作为vis的一列。@Bergi您的解决方案有帮助。我还想知道如何使用where和insert``where t->>'itemId'!=从vw_项目状态_详细信息v;中选择不同的v.item_id这是一个给定错误,表示一个子查询返回了多行,该子查询用作expression@AagamDoshi那样的话,你就不想进去了。
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'
);;