あなたがkultivar2
の値よりも多くを持っている場合は、エラーが生成されますあなたのサブクエリ。 group by
は、それぞれkultivar2
の行を返します。
あなたが問題を解決するために相関サブクエリを使用できますが(答えの末尾を参照)、私は更新可能のCTEとウィンドウ関数でこれを行うのが好き:
with toupdate as (
select r.*,
max(persentklaarkultivar2) over (partition by kultivar2) as maxval
from LeweringVsSkattingResultaat r
)
update toupdate
set maks = maxval;
私は窓関数であることに注意する必要があり、あなたはあなたが望むときはいつでも最大値を簡単に計算できるので、それを保存する必要はありません。ウィンドウ関数はLeweringVsSkattingResultaat(kultivar2, persentklaarkultivar2)
のインデックスを利用できるように最適化されています。
これはおそらくより良いアプローチです。テーブルから行が挿入、更新、または削除されたときに、maks
の値を最新の状態に保つ方法を把握する必要はありません。
相関副問合せは次のようになります()
UPDATE LeweringVsSkattingResultaat
SET maks = (SELECT max(persentklaarkultivar2) FROM
LeweringVsSkattingResultaat
group by kultivar2)
を削除
UPDATE r
SET maks = (SELECT max(r2.persentklaarkultivar2)
FROM LeweringVsSkattingResultaat r2
WHERE r2.kultivar2 = r.kultivar2
)
FROM LeweringVsSkattingResultaat r;
内側の選択であるあなたにゴードンをありがとうございます。それは私のために働いた。 – Gideon