I have a query like this (in a function):
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;
Where param_x is a parameter of my function. Is there a way to NOT update those columns, for which the param is NULL? For example – if param_4 and param_5 are NULL, then update only the first three columns and leave old values for column_4 and column_5.
The way I am doing it now is:
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;
Is there a better way?
Drop the SELECT statement, there is no need for, just use the current value: