JOIN の結果を条件にUpadteをする - 表結合の結果を用いたテーブル更新 - SQL

JOINの結果を条件にして表を更新するSQLを紹介します。

概要

JOINの結果を条件にして表を更新する場合は、from句を用います。

書式

下記の書式を利用します。
update 対象テーブル名 set 設定する列名 = 設定する値 from 対象テーブル名
  join join先テーブル名 on 対象テーブル名.連結する列名 = join先テーブル名.連結する列名
  where (join先テーブルの列名を利用した更新の条件)

具体例を紹介します。

テーブル構造

下記のテーブルを準備します。
TABLE_A
idprice
13
23
36
46
56

TABLE_B
idrel_idcode
133
243
351
412
522

SQL

下記のSQLを実行します。
update TABLE_A set price = 0 
from TABLE_A inner join TABLE_B on TABLE_A.id = TABLE_B.rel_id
where price = 6 and TABLE_B.code = 3

解説

TABLE_Aのid列とTABLE_Bのrel_id列でinner joinします。 条件は、TABLE_Aの価格(price)が6で、join先のTABLE_Bの商品コード(code)が3の項目に対して値の更新を実行します。更新は価格(price)を0に設定します。TABLE_AだけであればID=3,4,5の価格が6ですが、ID=3のリレーション先のcodeは3,ID=4のリレーション先のcodeは3,ID=5のリレーション先のcodeは1のため、更新対象は ID=3,4のみとなります。

TABLE_A.idTABLE_A.priceTABLE_B.rel_idTABLE_B.code
1312
2322
3633
4643
5651

TABLE_A.id の 3,4のPriceが更新対象になります。

実行結果

SQL実行後の値は下記になります。
更新後の値
TABLE_A.idTABLE_A.priceTABLE_B.rel_idTABLE_B.code
1312
2322
3033
4043
5651

著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。
最終更新日: 2023-03-26
作成日: 2012-09-03
iPentec all rights reserverd.