在使用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]);
答案 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 <> '';