我有一个这样的查询(在一个函数中):
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_4
和 param_5
为 NULL
,则仅更新前三列并保留 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/