備忘録としてメモします。
SQLの書き方
Table_A の column_1 列と column_2 列を、Table_B の column_x 列と column_y 列の内容で UPDATE したい。
(Table_A と Table_B は、それぞれの ID 列で JOIN される。)
記述例
UPDATE Table_A
SET Table_A.column_1 = Table_B.column_x
,Table_A.column_2 = Table_B.column_y
FROM Table_A
INNER JOIN Table_B ON Table_A.ID=Table_B.ID
実例
以下の社員テーブルの「所属課」列を、社員所属テーブルの「所属課」で UPDATE したいとします。
(分かりやすいよう、テーブル名と列名は日本語としました。)
###「社員」テーブル
社員ID | 氏名 | 役職 | 所属課 |
---|---|---|---|
1 | 田中一郎 | 課長 | NULL |
2 | 鈴木次郎 | 係長 | NULL |
3 | 岡田三郎 | 係長 | NULL |
4 | 中田花子 | 課長 | NULL |
5 | 太田理恵 | 課長 | NULL |
6 | 田村絵里 | 係長 | NULL |
社員テーブルの「所属課」列が全て NULL(未設定)になっています。
この「所属課」列を、以下の「社員所属テーブル」からデータを引っ張ってきて UPDATE します。
###「社員所属」テーブル
社員ID | 所属課 |
---|---|
1 | 営業課 |
2 | 総務課 |
3 | 企画課 |
4 | 総務課 |
5 | 企画課 |
6 | 営業課 |
SQL
更新スクリプト
UPDATE [社員]
SET [社員].[所属課] = [社員所属].[所属課]
FROM [社員]
INNER JOIN [社員所属] ON [社員].[社員ID]=[社員所属].[社員ID]
感想
INSERT ~ SELECT はわりと分かりやすいのですが、UPDATE ~ SELECT は、
UPDATE [テーブル名] SET [列名]=xxx
の後ろに、
FROM [テーブル名]
と、同じテーブル名を FROM 句でまた書かないといけないのを、つい忘れてしまいます。