多くの列が同じテーブル内の他の列から計算され、数式が複雑な方法で相互に構築されているテーブルを計算する最良の方法は何ですか?
パフォーマンスを気にしない場合は、各列を独自の update ステートメントで単純に計算できます。
update x set b1 = a1 + a2;
update x set b2 = a3 * b1;
update x set b3 = a4 * b2;
...
または、数式を手動で展開すると、1 回の更新ですべてを実行できます。
update x set
b1 = a1 + a2,
b2 = a3 * (a1 + a2),
b3 = a4 * (a3 * (a1 + a2));
ここでの問題は、これらの数式が巨大になり、変更やデバッグが困難になる可能性があることです。
これらの場合にパフォーマンスと保守性の両方を実現できるように、Postgres (または一般的には SQL) に何らかの方法がありますか?
これが私がやりたいことです:
update x set
b1 = _b1,
b2 = _b2,
b3 = _b3
with
_b1 = a1 + a2,
_b2 = a3 * _b1,
_b3 = a4 * _b2;
複数の戻り値を持つ関数で数式が定義されている実用的なソリューションが 1 つありますが、これは他の方法ではかなり柔軟性がないため、代替手段を探しています。