仅通过有效值更新表中的行,并跳过未定义的值

uyhoqukh  于 2021-08-13  发布在  Java
关注(0)|答案(2)|浏览(255)

我有下一个更新行的方法:

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

如何修改这个查询,例如它将跳过 value2 以及 value3 ,如果是的话 undefined 只更新列 value1 ?

enxuqcxy

enxuqcxy1#

短路就是方法,基本上只有在值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等),这样会使代码更难阅读。

nbnkbykc

nbnkbykc2#

可以使用大小写表达式:

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

相关问题