web-dev-qa-db-ja.com

SET =(SQLクエリ)のときに複数のIDを更新する

複数のレコードを更新したいのですが、設定される値は指定されたレコードの主キーに基づいています。私が使用できるので、これは単一のレコードの問題ではありません。

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

ありがとうございました

3
0000

YA2の両方に同じINリストを指定する代わりに、A2にのみ指定し、サブクエリをT1T2.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を使用すると、任意の行が選択されることにも注意してください。 T2XごとにYの2つ以上の異なる値が存在する可能性がある場合は、特定の十分なソート基準のセットを持つORDER BY句を導入して結果を確定的にすることをお勧めします。

一方、XYごとに同じままである場合、おそらくT2に冗長な情報を格納しています。おそらく、その場合、a)T1T2.Yおよびb)への参照であるように見えるという事実に基づいて、X列をT1.A2に移動する必要があります= A2T1の主キーです。

5
Andriy M