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
[会員テーブル].[とあるコード] = '';