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」の使い方でした。
コメント
「渋谷区」が「足立区」にアップデートされてしまっていますね
UPDATE後のデータに誤りがありましたので修正しました。
ご指摘ありがとうございます。