他のテーブルのレコードの値でレコードを更新する
他のテーブルのレコードや、他のテーブルを条件を指定して取得したレコードの値でレコードを更新するSQL文を紹介します。
概要
他のテーブルのレコードや他のテーブルから取得したレコードで更新する場合には、UPDATE文のFROM句にテーブル名を指定します。条件を設定する場合にはWHERE句を記述します。
書式
UPDATE (テーブル名1) SET (列名1)=(列名A), (列名2)=(列名B), (列名3)=(列名C),... FROM (テーブル名2) WHERE (条件式)
または
UPDATE (テーブル名1) SET (列名1)=(列名A), (列名2)=(列名B), (列名3)=(列名C),... FROM (テーブル名2) AS (テーブル名2の別名) WHERE (条件式)
例1:一致するフィールドの列の値を更新する例
products テーブル
id | name | price | category |
1 | Penguin | 250 | Bird |
2 | Bear | 1050 | Mammal |
3 | Duck | 150 | Bird |
4 | Camel | 550 | Mammal |
5 | Owl | 185 | Bird |
6 | Whale | 880 | Mammal |
working テーブル
id | name | value |
1 | Penguin | |
2 | Whale | |
上記のテーブルがあり、productsテーブルのnameとworkingテーブルのnameが同じレコードをworkingテーブルのvalueをproductsテーブルのpriceで更新する場合は、以下のSQLを実行します。
UPDATE working SET value=price FROM products WHERE working.name = products.name
実行後のworkingテーブルは以下の状態になります。
working テーブル
id | name | value |
1 | Penguin | 250 |
2 | Whale | 880 |
例2:条件付きで一致するフィールドの列の値を更新する例
products テーブル
id | name | price | category |
1 | Penguin | 250 | Bird |
2 | Bear | 1050 | Mammal |
3 | Duck | 150 | Bird |
4 | Camel | 550 | Mammal |
5 | Owl | 185 | Bird |
6 | Whale | 880 | Mammal |
working テーブル
id | name | value | category |
1 | Penguin | | |
2 | Whale | | |
上記のテーブルがあり、productsテーブルのnameとworkingテーブルのnameが同じレコードでかつcategoryが"Mammal"であるレコードを
workingテーブルのvalue,categoryをproductsテーブルのprice,categoryで更新する場合は、以下のSQLを実行します。
UPDATE working SET working.value=products.price, working.category=products.category
FROM products WHERE working.name = products.name AND products.category='Mammal'
実行後のworkingテーブルは以下の状態になります。
working テーブル
id | name | value | category |
1 | Penguin | | |
2 | Whale | 880 | Mammal |
例3: 実用的でない例
ProductsC テーブル
id | category | product_name |
1 | キャンディ | クールキャンディ |
2 | チョコレート | カカオ99.9% |
3 | ケーキ | みるくDeショート |
4 | キャンディ | もふもふキャンディ |
5 | キャンディ | レモンですっぱー |
6 | チョコレート | マカダミアンナッツチョコ |
7 | チョコレート | カカオ99.9% |
8 | キャンディ | ミルク濃厚キャンディ |
productsCC テーブル
id | name |
1 | |
2 | |
3 | |
次のSQL文を実行すると、ProductsCC テーブルのnameフィールドには、ProductsC テーブルの最初の product_nameの値で更新されます。
UPDATE ProductsCC SET name=product_name FROM ProductsC
実行後の ProductsCC テーブルの値は以下となります。
ProductsCテーブルの最初のレコードのproduct_nameフィールドの値である"クールキャンディ"がnameフィールドに設定されます。
productsCC テーブル
id | name |
1 | クールキャンディ |
2 | クールキャンディ |
3 | クールキャンディ |
4 | クールキャンディ |
著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。
作成日: 2014-07-21
改訂日: 2023-12-23