web-dev-qa-db-ja.com

SQLを使用した一括レコード更新

次の構造を持つ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)

ただし、これが適切なアプローチかどうかはわかりません。誰かがこれを行う方法を教えてもらえますか?

20
user208662

それをする:

update      Table1
set         Description = t2.Description
from        Table1 t1
inner join  Table2 t2
on          t1.DescriptionID = t2.ID
38
Tocco

あなたのアプローチは大丈夫です

たぶん少しはっきりしている(とにかく私には!)

UPDATE
  T1
SET
  [Description] = t2.[Description]
FROM
   Table1 T1
   JOIN
   [Table2] t2 ON t2.[ID] = t1.DescriptionID

このクエリとクエリは、同じクエリであり、レイアウトが異なるため、同じパフォーマンスを実行する必要があります。

25
gbn

これは、通常のUPDATEJOINを使用して行うことができます

UPDATE T1
SET Description = T2.Description
   FROM Table1 T1
      JOIN Table2 T2
         ON T2.ID = T1.DescriptionId
3
George Johnston

または、次のような結合を使用せずに単純に更新できます。

Update t1 set  t1.Description = t2.Description from @tbl2 t2,tbl1 t1
where t1.ID= t2.ID
2
Ejaz Waquif

質問に投稿したSQLは、それを行う1つの方法です。 SQLのほとんどのものには、複数の方法があります。

UPDATE
  [Table1] 
SET
  [Description]=(SELECT [Description] FROM [Table2] t2 WHERE t2.[ID]=Table1.DescriptionID)

PROD DBでこれを実行することを計画している場合は、最初にスナップショットまたはミラーを作成してテストすることをお勧めします。いくつかのレコードで期待どおりにデータが終了することを確認します。満足したら、実際のDBで実行します。

0
Jesse Webb