如何编写insert SQL语句,循环遍历对象数组中的每条记录并插入到记录中';相应地,有哪些具体的栏目?

如何编写insert SQL语句,循环遍历对象数组中的每条记录并插入到记录中';相应地,有哪些具体的栏目?,sql,json,postgresql,Sql,Json,Postgresql,首先,我想弄清楚如何在sql语句中编写一个对象数组(比如js),但我在互联网上找不到任何东西 我当然可以重复所有的insert语句,但我真的只想循环一个数据集,并将它们注入一个表中,用于一组列,这些列具有完全相同的insert语句和不同的值!但是,如果数据集像对象数组一样太复杂,那么似乎没有办法做到这一点?或者我必须写多个数组列表来表示每一列,这真的很愚蠢。。没有 谢谢 数据集示例 [ { name: 'abc', gender: 'male', }, { n

首先,我想弄清楚如何在sql语句中编写一个对象数组(比如js),但我在互联网上找不到任何东西

我当然可以重复所有的insert语句,但我真的只想循环一个数据集,并将它们注入一个表中,用于一组列,这些列具有完全相同的insert语句和不同的值!但是,如果数据集像对象数组一样太复杂,那么似乎没有办法做到这一点?或者我必须写多个数组列表来表示每一列,这真的很愚蠢。。没有

谢谢

数据集示例

[
  {
    name: 'abc',
    gender: 'male',
  },
  {
    name: 'bbc',
    gender: 'female',
  },
  {
    name: 'ccc',
    gender: 'male',
  },
]
并将它们放入一个包含列的表中

nameHere
genderThere

您可以使用
jsonb_array_elements
从数组中提取每个JSON,然后将其用作插入的源:

create table x(name text, gender text);

insert into x (name, gender)
select t ->> 'name', t ->> 'gender'
from jsonb_array_elements(
'[
  {
    "name": "abc",
    "gender": "male"
  },
  {
    "name": "bbc",
    "gender": "female"
  },
  {
    "name": "ccc",
    "gender": "male"
  }
]'::jsonb) t;
在线示例:

更新(范围更改后)

要处理嵌套的JSON结构,需要将返回
jsonb
->
的运算符与返回“纯文本”的运算符组合起来:


有关JSON运算符的更多详细信息,请参见

您可以使用
jsonb_数组_元素
从数组中提取每个JSON,然后将其用作插入的源:

create table x(name text, gender text);

insert into x (name, gender)
select t ->> 'name', t ->> 'gender'
from jsonb_array_elements(
'[
  {
    "name": "abc",
    "gender": "male"
  },
  {
    "name": "bbc",
    "gender": "female"
  },
  {
    "name": "ccc",
    "gender": "male"
  }
]'::jsonb) t;
在线示例:

更新(范围更改后)

要处理嵌套的JSON结构,需要将返回
jsonb
->
的运算符与返回“纯文本”的运算符组合起来:

有关JSON运算符的更多详细信息,请参见

这将输出一个表

  name | gender
  -----+-------
  abc  | male
  bcc  | female 
  ccc  | male 
您可以将其插入任何需要的表中

这将输出一个表

  name | gender
  -----+-------
  abc  | male
  bcc  | female 
  ccc  | male 

您可以将它插入任何您想要的表中

@a_horse_,带有_no_名称感谢您的后续工作,我添加了一个示例,介绍了我尝试插入的内容achieve@a_horse_with_no_name谢谢你的跟进,我添加了一个关于我试图达到的目标的例子哦哦,那太棒了!只是有点好奇。如果数组还有一层嵌套,比如说
{name:{first:'a',last:'bc'},gender:'male',},
你能告诉我如何定位
first
last
嵌套对象吗?那只是在
'name'
之后再加一个
->
吗?哇哦,那太好了!只是有点好奇。如果数组还有一层嵌套,比如说
{name:{first:'a',last:'bc'},gender:'male',},
你能告诉我如何定位
first
last
嵌套对象吗?是不是在
'name'
之后再加一个
->