PostgreSQL条件表达式

时间:2018-06-28 16:16:45

标签: postgresql pg-node

在使用node-postgres的PostgreSQL SQL查询中,如果javascript对象的值不是空字符串,是否可以编写两个插入语句?如果是空字符串,是否可以编写一个insert语句?

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

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]);

2 个答案:

答案 0 :(得分: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,则将插入两行;如果为空字符串,则插入两行。当然,您应该调整please enter the password above条件以符合您的期望。

答案 1 :(得分: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 <> '';