PostgreSQL условные выражения - PullRequest
0 голосов
/ 28 июня 2018

Есть ли способ написать два оператора вставки, если значение объекта 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]);

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Вы можете «раскрутить» 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 <> '';
0 голосов
/ 28 июня 2018

Проверьте, имеет ли объект значение в свойстве 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 в соответствии с тем, что ожидаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...