1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

別テーブルのSELECT結果で、一括UPDATEしたい(UPDATE ~ SELECT)

Last updated at Posted at 2019-10-28

備忘録としてメモします。

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 営業課
img_sql1.png

SQL

更新スクリプト
UPDATE [社員]
SET [社員].[所属課] = [社員所属].[所属課]
FROM [社員]
INNER JOIN [社員所属] ON [社員].[社員ID]=[社員所属].[社員ID]

感想

INSERT ~ SELECT はわりと分かりやすいのですが、UPDATE ~ SELECT は、
UPDATE [テーブル名] SET [列名]=xxx
の後ろに、
FROM [テーブル名]
と、同じテーブル名を FROM 句でまた書かないといけないのを、つい忘れてしまいます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?