【问题标题】:How to create multiple rows from one json array field in postgresql如何从postgresql中的一个json数组字段创建多行
【发布时间】:2022-10-19 04:33:25
【问题描述】:

如何从 postgresql 中的一个 json 数组字段创建多行。

create table coolant_consum(coolant_stock_kg jsonb, coolant_disposed_kg jsonb,coolant jsonb);
create table raw_json(data jsonb);

insert into raw_json (data) values
(
'[{"coolant_stock_kg":["3","7.4"], "coolant_disposed_kg": [
    "3",
    "7.4"
], "coolant" : ["R1","R2","R2"]}]
');

INSERT INTO coolant_consum(coolant_stock_kg,coolant_disposed_kg,coolant)
   select (j->>'coolant_stock_kg' ) ::jsonb,
          (j->>'coolant_disposed_kg' ) ::jsonb,
          (j->>'coolant' ) ::jsonb
   from raw_json cross join jsonb_array_elements(data) as j;

with lines as (
     SELECT coolant_stock_kg as arr, coolant_disposed_kg as brr,coolant as crr
     FROM coolant_consum
     )
select  arr->>0 as coolant_stock,  brr->>0 as coolant_disposed_kg, crr->>0 as coolant 
from lines
group by arr,brr,crr;

这给了我以下结果

coolant_stock | coolant_disposed | coolant 
3             | 3                | R1  

   

我想添加下一行,并且后面有多少行也无关紧要。

【问题讨论】:

    标签: json postgresql


    【解决方案1】:

    尝试这个 :

    select jsonb_array_elements(j->'coolant_stock_kg') AS coolant_stock
         , jsonb_array_elements(j->'coolant_disposed_kg') AS coolant_disposed
         , jsonb_array_elements(j->'coolant') AS coolant
     from coolant_consum AS j ;
    

    test result in dbfiddle

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 2015-06-05
      • 1970-01-01
      • 2018-04-19
      • 2017-04-04
      相关资源
      最近更新 更多