【SQL Server】UPDATE FROM(SELECT結果でUPDATEする)

SQL ServerのUPDATE FROM(SELECT結果でUPDATEする)

SELECT結果でUPDATEする

SQL Serverでデータを更新するには「UPDATE」を使いますが、「UPDATE ~ FROM」というSELECTした結果でUPDATEする方法もあります。

「INSERT SELECT」のUPDATE版といった感じですね。「UPDATE SELECT」といった方がわかりやすいかも。

今回はSQL Serverの「UPDATE FROM」の使い方を解説します。

--SELECTした結果でUPDATEする
UPDATE {テーブル1}
SET {テーブル1}.{列2} = {テーブル2}.{列2}
,{テーブル1}.{列3} = {テーブル2}.{列3}
FROM {テーブル2}
WHERE {テーブル1}{列1} = {テーブル2}{列1}
;

通常のUPDATE文に「FROM」を追加します。「FROM」にはSELECTしたいテーブルとし、WHEREでテーブルの結合条件を記述します。

<サンプルデータ>

emp_wkテーブル

empno empname address
D001 加藤花子 東京都渋谷区1-1-1
D002 田中太郎 東京都渋谷区2-1-1

empテーブル

empno empname address update_f
D001 藤原花子 東京都渋谷区10-2-3 1
D002 田中太郎 東京都渋谷区2-1-1 0

例1. UPDATE FROM(SELECTした結果でUPDATEする)

ここでは「emp_wk」を更新します。更新する際、「emp」テーブルのレコードで「emp_wk」をUPDATEします。

--empテーブルのデータを使ってemp_wkテーブルを更新する
UPDATE emp_wk
SET emp_wk.empname = emp.empname
,emp_wk.address = emp.address
FROM emp 
WHERE emp_wk.empno = emp.empno
AND emp.update_f = 1
;

emp_wkテーブル

empno empname address
D001 藤原花子 東京都渋谷区10-2-3
D002 田中太郎 東京都渋谷区2-1-1

条件としては、「emp」テーブルの「update_f = 1」である「empno」と同じナンバーを持つ「emp_wk」テーブルを更新しました。つまり「empno」が「D001」のレコードですね。このレコードの「empname」と「address」を更新しました。

別のテーブルのデータを使って更新できるのは便利ですね!

実は、この「UPDATE ~ FROM」と同じことが「UPDATE JOIN」でも実現できます。詳細はこちらを参照してください。

以上、SQL ServerでSELECTした結果でUPDATEする「UPDATE FROM」の使い方でした。

 

コメント

  1. 匿名 より:

    「渋谷区」が「足立区」にアップデートされてしまっていますね

    • sqlserverマスター より:

      UPDATE後のデータに誤りがありましたので修正しました。
      ご指摘ありがとうございます。