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