SQL ServerのUPDATE FROM(SELECT結果でUPDATEする)
SQL Serverでデータを更新するには「UPDATE」を使いますが、「UPDATE ~ FROM」というSELECTした結果でUPDATEする方法もあります。
「INSERT SELECT」のUPDATE版といった感じですね。「UPDATE SELECT」といった方がわかりやすいかも。
今回はSQL Serverの「UPDATE FROM」の使い方を解説します。
通常の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テーブル
empno | empname | address |
D001 | 藤原花子 | 東京都渋谷区10-2-3 |
D002 | 田中太郎 | 東京都渋谷区2-1-1 |
ここでは「emp」テーブルの更新されたレコードで「emp_wk」をUPDATEしました。
条件としては、「emp」テーブルの「update_f = 1」である「empno」と同じナンバーを持つ「emp_wk」テーブルを更新しました。
つまり「empno」が「D001」のレコードですね。このレコードの「empname」と「address」を更新しました。
この「UPDATE ~ FROM」と同じことが「UPDATE JOIN」でも実現できます。詳細はこちらを参照してください。
→SQL ServerのUPDATE JOIN(SELECT結果でUPDATEする)
以上、SQL ServerでSELECTした結果でUPDATEする「UPDATE FROM」の使い方でした。
コメント
「渋谷区」が「足立区」にアップデートされてしまっていますね
UPDATE後のデータに誤りがありましたので修正しました。
ご指摘ありがとうございます。