複数のレコードを更新したいのですが、設定される値は指定されたレコードの主キーに基づいています。私が使用できるので、これは単一のレコードの問題ではありません。
UPDATE T1
SET A1 = (SELECT TOP 1 X FROM T2 WHERE Y = ID1)
WHERE A2 = ID1
IN演算子は正しいリストを更新しますが、サブクエリでは更新しないため、WHERE句に対しては正常に機能します。 SETでは、IDリストのすべての値から上位1を取得します。対応するレコード/ IDにそれが必要です。
使用:Microsoft T-SQL
ありがとうございました
Y
とA2
の両方に同じINリストを指定する代わりに、A2
にのみ指定し、サブクエリをT1
のT2.Y = T1.A2
と相関させるには、次のようにします。
UPDATE
dbo.T1
SET
A1 = (SELECT TOP 1 T2.X FROM dbo.T2 WHERE T2.Y = T1.A2)
WHERE
A2 IN (ID1, ID2, ...)
;
このようにして、サブクエリは、更新されるT2
行のキーに一致するT1
から最上位の行を選択します。
TOP n
なしでORDER BY
を使用すると、任意の行が選択されることにも注意してください。 T2
のX
ごとにY
の2つ以上の異なる値が存在する可能性がある場合は、特定の十分なソート基準のセットを持つORDER BY
句を導入して結果を確定的にすることをお勧めします。
一方、X
がY
ごとに同じままである場合、おそらくT2
に冗長な情報を格納しています。おそらく、その場合、a)T1
がT2.Y
およびb)への参照であるように見えるという事実に基づいて、X
列をT1.A2
に移動する必要があります= A2
はT1
の主キーです。