JOINの結果を条件にして表を更新するSQLを紹介します。
概要
JOINの結果を条件にして表を更新する場合は、from句を用います。
書式
下記の書式を利用します。
update 対象テーブル名 set 設定する列名 = 設定する値 from 対象テーブル名
join join先テーブル名 on 対象テーブル名.連結する列名 = join先テーブル名.連結する列名
where (join先テーブルの列名を利用した更新の条件)
例
具体例を紹介します。
テーブル構造
下記のテーブルを準備します。
TABLE_A
id | price |
1 | 3 |
2 | 3 |
3 | 6 |
4 | 6 |
5 | 6 |
TABLE_B
id | rel_id | code |
1 | 3 | 3 |
2 | 4 | 3 |
3 | 5 | 1 |
4 | 1 | 2 |
5 | 2 | 2 |
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.id | TABLE_A.price | TABLE_B.rel_id | TABLE_B.code |
1 | 3 | 1 | 2 |
2 | 3 | 2 | 2 |
3 | 6 | 3 | 3 |
4 | 6 | 4 | 3 |
5 | 6 | 5 | 1 |
TABLE_A.id の 3,4のPriceが更新対象になります。
実行結果
SQL実行後の値は下記になります。
更新後の値
TABLE_A.id | TABLE_A.price | TABLE_B.rel_id | TABLE_B.code |
1 | 3 | 1 | 2 |
2 | 3 | 2 | 2 |
3 | 0 | 3 | 3 |
4 | 0 | 4 | 3 |
5 | 6 | 5 | 1 |
著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。
最終更新日: 2023-03-26
作成日: 2012-09-03