次の構造を持つSQL Server 2008環境に2つのテーブルがあります
Table1
- ID
- DescriptionID
- Description
Table2
- ID
- Description
Table1.DescriptionIDはTable2.IDにマップされます。しかし、もう必要ありません。 Table1のDescriptionプロパティをTable2に関連付けられた値に設定するために、一括更新を行いたいと思います。言い換えれば、私はこのようなことをしたいです:
UPDATE
[Table1]
SET
[Description]=(SELECT [Description] FROM [Table2] t2 WHERE t2.[ID]=Table1.DescriptionID)
ただし、これが適切なアプローチかどうかはわかりません。誰かがこれを行う方法を教えてもらえますか?
それをする:
update Table1
set Description = t2.Description
from Table1 t1
inner join Table2 t2
on t1.DescriptionID = t2.ID
あなたのアプローチは大丈夫です
たぶん少しはっきりしている(とにかく私には!)
UPDATE
T1
SET
[Description] = t2.[Description]
FROM
Table1 T1
JOIN
[Table2] t2 ON t2.[ID] = t1.DescriptionID
このクエリとクエリは、同じクエリであり、レイアウトが異なるため、同じパフォーマンスを実行する必要があります。
これは、通常のUPDATE
でJOIN
を使用して行うことができます
UPDATE T1
SET Description = T2.Description
FROM Table1 T1
JOIN Table2 T2
ON T2.ID = T1.DescriptionId
または、次のような結合を使用せずに単純に更新できます。
Update t1 set t1.Description = t2.Description from @tbl2 t2,tbl1 t1
where t1.ID= t2.ID
質問に投稿したSQLは、それを行う1つの方法です。 SQLのほとんどのものには、複数の方法があります。
UPDATE
[Table1]
SET
[Description]=(SELECT [Description] FROM [Table2] t2 WHERE t2.[ID]=Table1.DescriptionID)
PROD DBでこれを実行することを計画している場合は、最初にスナップショットまたはミラーを作成してテストすることをお勧めします。いくつかのレコードで期待どおりにデータが終了することを確認します。満足したら、実際のDBで実行します。