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

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

SELECT結果でUPDATEする

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

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

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

--SELECTした結果でUPDATEする
UPDATE {テーブル1}
SET {テーブル1}.{列2} = {テーブル2}.{列2}
,{テーブル1}.{列3} = {テーブル2}.{列3}
FROM {テーブル1} (INNER/LEFT) JOIN {テーブル2} ON {テーブル1}{列1} = {テーブル2}{列1}
WHERE 条件
;

UPDATEするテーブルをSELECTしたいテーブルとJOINし、その結果でUPDATEします。

結合は内部結合「INNER JOIN 」、外部結合「LEFT JOIN」のどちらでも有効です。

<サンプルデータ>

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 JOIN(SELECTした結果でUPDATEする)

--UPDATE JOINで更新する
UPDATE emp_wk
SET emp_wk.empname = emp.empname
,emp_wk.address = emp.address
FROM emp_wk 
 INNER JOIN emp 
ON emp_wk.empno = emp.empno
AND emp.update_f = 1
;

ここでは「emp_wk」テーブルと「emp」テーブルを内部結合し、「emp」テーブル「update_F=1」のSELECT結果で「emp_wk」テーブルを更新しました。

emp_wkテーブル

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

同じことが「UPDATE ~ FROM」でも実現できます。こちらを参照ください。

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

 

コメント