1

如果javascript对象的值不是空字符串,是否有办法编写两个插入语句,或者如果它是postgreSQL查询中的空字符串,则使用一个插入语句node-postgres

我的数据库表“工作”设置:

CREATE TABLE "job" (
  "id" SERIAL PRIMARY KEY,
  "company" VARCHAR (20) NOT NULL
);

例如,我希望这个对象插入两行:

{
  company: 'Apple',
  company_two: 'Google'
}

我希望这个对象插入一行:

{
  company: 'Facebook',
  company_two: ''
}

如果 javascript 对象具有“company_two”的值,我想在数据库中添加第二行。

这是我正在努力插入一行的内容,但这并没有考虑到其他属性:

pool.query('INSERT INTO "job" ("company") VALUES $1', [testObject.company]);
4

2 回答 2

1

检查对象是否在company_two属性中具有值并采取相应措施,例如:

const query = 'INSERT INTO "job" ("company") VALUES ($1)';

if (testObject.company_two != '') {
  pool.query(`${query}, ($2)`, [ testObject.company, textObject.company_two ]);
} else {
  pool.query(query, [ testObject.company ]);
}

如果是空字符串,这将插入一行,如果company_two不是空字符串,则插入两行。当然,您应该调整if条件以符合您的期望。

于 2018-06-28T16:44:29.947 回答
0

您可以将 JSON“取消嵌套”到行,然后将其用作插入源:

insert into job (company)
select t.comp
from jsonb_each_text('{
              "company": "Apple",
              "company_two": "Google"
              }'::jsonb) t(k,comp)
where t.comp <> '';

将插入两家公司。

这只会插入一行:

insert into job (company)
select t.comp
from jsonb_each_text('{
              "company": "Facebook",
              "company_two": ""
              }'::jsonb) t(k,comp)
where t.comp <> '';
于 2018-06-28T16:59:59.710 回答