以下のようなクエリがあります。
UPDATE some_table
SET column_x = CASE WHEN x_specific_condition THEN new_value_for_x ELSE column_x END,
column_y = CASE WHEN y_specific_condition THEN new_value_for_y ELSE column_y END,
WHERE some_more_conditions
上記の問題は、some_more_conditionsがtrueを返す特定の条件に関係なくtrueを返す場合、各列(x、y)は引き続き独自の値で更新されます。 ELSEを上から削除しようとしましたが、うまくいきませんでした
Some_more_conditionsは両方のケースで同じなので、私は組み合わせています。1回の更新ですべてを実行する方が良いと思います(提案は歓迎します)
特定の条件が一致しない個々の列をスキップして、上記の更新を1つのクエリで実行できる方法があるかどうかを知っていますか(基本的に同じ値の上書きを避けます)
UPDATEのSET句で指定された両方の列は、allsome_more_conditions
、何があってもx_specific_condition
またはy_specific_condition
は評価することがあります。単一のステートメントに固執している間、これを回避する構文はありません。
だから、それと一緒に暮らすか、2つのステートメントを実行します。
UPDATE some_table
SET column_x = new_value_for_x
WHERE some_more_conditions
AND x_specific_condition;
UPDATE some_table
SET column_y = new_value_for_y
WHERE some_more_conditions
AND y_specific_condition;