Don't update column if update value is null
Drop the SELECT statement, there is no need for, just use the current value:
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;
Neat trick, thanks Przemek, Frank & Erwin!
I suggest a minor edit to Erwin's answer to avoid empty updates. If any parameters were null (meaning: "use the old value"), the row was updated each time even though the row values did not change (after the first update).
By adding "param_x IS NOT NULL", we avoid empty updates:
UPDATE some_table SET column_1 = COALESCE(param_1, column_1), column_2 = COALESCE(param_2, column_2), ...WHERE id = some_idAND (param_1 IS NOT NULL AND param_1 IS DISTINCT FROM column_1 OR param_2 IS NOT NULL AND param_2 IS DISTINCT FROM column_2 OR ... );
Additionally, to avoid empty updates:
UPDATE some_table SET column_1 = COALESCE(param_1, column_1), column_2 = COALESCE(param_2, column_2) ...WHERE id = some_id;AND (param_1 IS DISTINCT FROM column_1 OR param_2 IS DISTINCT FROM column_2 OR ... );
This assumes target columns to be defined NOT NULL
. Else, see Geir's extended version.