sql - 如果更新值为空,则不更新列

标签 sql postgresql null sql-update

我有一个这样的查询(在一个函数中):

UPDATE some_table SET
  column_1 = param_1,
  column_2 = param_2,
  column_3 = param_3,
  column_4 = param_4,
  column_5 = param_5
WHERE id = some_id;

param_x 是我函数的一个参数。有没有办法不更新参数为 NULL 的那些列?例如 - 如果 param_4param_5NULL,则仅更新前三列并保留 column_4 的旧值> 和 column_5

我现在的做法是:

SELECT * INTO temp_row FROM some_table WHERE id = some_id;

UPDATE some_table SET
  column_1 = COALESCE(param_1, temp_row.column_1),
  column_2 = COALESCE(param_2, temp_row.column_2),
  column_3 = COALESCE(param_3, temp_row.column_3),
  column_4 = COALESCE(param_4, temp_row.column_4),
  column_5 = COALESCE(param_5, temp_row.column_5)
WHERE id = some_id;

有没有更好的办法?

最佳答案

去掉SELECT语句,不需要,直接用当前值:

UPDATE some_table SET
  column_1 = COALESCE(param_1, column_1),
  column_2 = COALESCE(param_2, column_2),
  column_3 = COALESCE(param_3, column_3),
  column_4 = COALESCE(param_4, column_4),
  column_5 = COALESCE(param_5, column_5)
WHERE id = some_id;

关于sql - 如果更新值为空,则不更新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13305878/

相关文章:

sql - 如何在H2中将时间转换为24小时格式

SQL解释计划: what is Materialize?

ios - CoreData TextField - 意外发现 nil

sql - 两个 mysql 查询,相同的结果 : is one better then the other?

SQL 如何获取 XML 数据列的值并在 where 子句中使用它

mysql - 无法在具有相同列的 MySQL 中添加外键

ruby-on-rails - 如何为 HABTM 关系填充连接表 Rails 3,postgresql

java - 如何使用java将excel表中的数据插入数据库(包括空格而不编辑它们)

MySQL 用第一个表中的数据填充第二个表

java - Spring:未在表中设置列值