1

多くの列が同じテーブル内の他の列から計算され、数式が複雑な方法で相互に構築されているテーブルを計算する最良の方法は何ですか?

パフォーマンスを気にしない場合は、各列を独自の 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 つありますが、これは他の方法ではかなり柔軟性がないため、代替手段を探しています。

4

2 に答える 2