Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql:使用JSON输入更新多行_Postgresql_Upsert - Fatal编程技术网

Postgresql:使用JSON输入更新多行

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

如果表中存在多行,我将尝试更新多行

示例输入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
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'
    );;