SELECT結果からのUPDATE文
SQLServerで他のテーブルのSELECT結果から、一括で更新するときには「FROM」句を利用します。
また、「JOIN」を利用することもできます。
例として会員マスタをバックアップしたテーブルのデータで更新をかけます。
「FROM」の使用例
UPDATE 会員マスタ SET 登録日= BK01.登録日 ,住所 = BK01.住所 FROM 会員バックアップ AS BK01 WHERE BK01.バックアップID = '0000001' AND BK01.会員NO = 会員マスタ.会員NO
「JOIN」の使用例
UPDATE 会員マスタ SET 登録日= BK01.登録日 ,住所 = BK01.住所 FROM 会員マスタ INNER JOIN ( SELECT 会員NO,住所,登録日 FROM 会員バックアップ WHERE バックアップID = '0000001' ) AS BK01 ON AND 会員マスタ.会員NO = BK01.会員NO
「JOIN」を使う場合は、「MIN」とか「MAX」とか、または加工した値での更新するときのような感じがする。
何も加工しない値での更新なら「FROM」だけでできそう。
SQLServer2008で動作確認済み
2013年1月31日追記
先日JOINを使ったSQLを作ってデータ更新を行いました。
参考になればと
UPDATE [会員テーブル] SET [とあるコード]= sub1.[とあるコード] ,[更新日時] = SYSDATETIME () FROM [会員テーブル] inner join ( select e1.ID ,e1.[とあるコード] from [エントリーテーブル] as e1 inner join ( select ID ,MAX([登録日時]) as '最大登録日時' from [エントリーテーブル] where [とあるコード] is not null and [とあるコード] != '0' group by ID ) AS e2 ON e1.ID = e2.ID AND e1.[登録日時] = e2.'最大登録日時' ) AS sub1 ON [会員テーブル].ID = sub1.ID where [会員テーブル].[とあるコード] = '';