Обновленная строка в таблице только допустимыми значениями и пропуск неопределенных значений - PullRequest
0 голосов
/ 28 мая 2020

У меня есть следующий метод, который обновляет строку:

  await db.query(`
    UPDATE some_table 
    SET value1 = $1, value12 = $2, value2 = $3
    WHERE id $5
  `, [value1, value2, value3, id]);

Как изменить этот запрос, чтобы он пропустил, например, value2 и value3, если они undefined и обновят только столбец value1?

Ответы [ 2 ]

1 голос
/ 28 мая 2020

Короткое замыкание - это путь к go, в основном набор добавляется только в том случае, если значения 1-3 не являются неопределенными.

let sql = `UPDATE some_table 
           SET ${$value1 !== undefined ? 'value1 = $value1, ' : ''}
               ${$value2 !== undefined ? 'value12 = $value2, ' : ''}
               ${$value3 !== undefined ? 'value3 = $value3, ' : ''}`;
sql.slice(0,-2); // remove last space and comma
sql += ' WHERE id ${id}';
await db.query(sql);

Не рекомендуется использовать стиль c для добавления параметров ($ 1, $ 2 et c.), это затрудняет чтение кода.

0 голосов
/ 28 мая 2020

Вы можете использовать выражение CASE:

UPDATE some_table 
  SET value1 = $1, 
      value12 = case when when value12 = 'undefined' then $2 else value12 end, 
      value2 = case when value2 = 'undefined' then $3 else value2 end
WHERE id = $5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...