在sql中从json创建表

uinbv5nw  于 2021-08-13  发布在  Java
关注(0)|答案(1)|浏览(368)

在使用sql时,我在表中遇到了以下json。我想将其转换为一个单独的表,其中一列用于消息,另一列用于指挥官。有什么作用吗?我在postgresql工作,如果有什么不同的话。我基本上是试图形成一个表格,比较指挥官的价值观和从其他表格指挥官的名字。因此,如果有一个简单的方法从儿子那里提取指挥官的名字而不形成表格,那也会很好。

{
    "log": [
        {
            "message": "Cute dino!",
            "commander": "Sam"
        },
        {
            "message": "Cute dino!",
            "commander": "Joe"
        },
        {
            "message": "Cute dino!",
            "commander": "Bob"
        }
    ],
    "features": {
        "food": "1",
        "fuel": "0",
        "minerals": "1",
        "dinosaurs": "1"
    }
}
v64noz0r

v64noz0r1#

你可以用 jsonb_array_elements() 要将数组转换为行,然后将其用作create table语句的源,请执行以下操作:

create table data
as
with input (value) as (
  values ('{
      "log": [
          {
              "message": "Cute dino!",
              "commander": "Sam"
          },
          {
              "message": "Cute dino!",
              "commander": "Joe"
          },
          {
              "message": "Cute dino!",
              "commander": "Bob"
          }
      ],
      "features": {
          "food": "1",
          "fuel": "0",
          "minerals": "1",
          "dinosaurs": "1"
      }
  }'::jsonb)
) 
select t.log ->> 'message' as message,
       t.log ->> 'commander' as commander
from input
  cross join jsonb_array_elements(value -> 'log') as t(log)

相关问题