別のテーブル (TableB) の値を使用してテーブル (TableA) を更新するクエリを作成しています。テーブル B は、TableA の各行に対して複数の値を返し、要求は TableB の最大の戻り値で更新することです。
私はこれを達成することができます:
UPDATE TableA
SET Value = (SELECT TOP 1 B.Value FROM dbo.TableB B
WHERE TableA.Key = B.Key
ORDER BY B.Value desc)
要求を達成するための最良の方法であるかどうかはわかりません。さらに、上記のクエリのパフォーマンスが心配です。テーブル B を複数回スキャンして、テーブル A の各行の値を見つけますか?
私はいくつかのクエリを試しました。
update tableA
set Value = TableB.Value
from (Table A left join Table B ... where ...)
2 番目の方がパフォーマンスが良いと思いますが、" をサポートしていないため、最大の値を取得できませんorder by"
。
テーブル B を 2 回結合し、B の値を比較すると問題が解決する可能性がありますが、最初のクエリよりもパフォーマンスが低下する可能性があります。
何か案は?
** 実際の状況は例よりも複雑です。たとえば、tableA と tableB が "....or....or...or..." で結合する必要がある場合は、さらにコストがかかります。