他のテーブルのレコードの値でレコードを更新する - SQL

他のテーブルのレコードや、他のテーブルを条件を指定して取得したレコードの値でレコードを更新するSQL文を紹介します。

概要

他のテーブルのレコードや他のテーブルから取得したレコードで更新する場合には、UPDATE文のFROM句にテーブル名を指定します。条件を設定する場合にはWHERE句を記述します。
補足
SQL Serverで異なるデータベース間でのselect結果でレコードを更新するSQLは「他のデータベースのテーブルのselectの結果でUpdateする (SQL Server Tips)」の記事を参照してください。

書式

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 テーブル
idnamepricecategory
1Penguin250Bird
2Bear1050Mammal
3Duck150Bird
4Camel550Mammal
5Owl185Bird
6Whale880Mammal

working テーブル
idnamevalue
1Penguin
2Whale

上記のテーブルがあり、productsテーブルのnameとworkingテーブルのnameが同じレコードをworkingテーブルのvalueをproductsテーブルのpriceで更新する場合は、以下のSQLを実行します。
UPDATE working SET value=price FROM products WHERE working.name = products.name
実行後のworkingテーブルは以下の状態になります。
working テーブル
idnamevalue
1Penguin250
2Whale880

例2:条件付きで一致するフィールドの列の値を更新する例

products テーブル
idnamepricecategory
1Penguin250Bird
2Bear1050Mammal
3Duck150Bird
4Camel550Mammal
5Owl185Bird
6Whale880Mammal

working テーブル
idnamevaluecategory
1Penguin
2Whale

上記のテーブルがあり、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 テーブル
idnamevaluecategory
1Penguin
2Whale880Mammal

例3: 実用的でない例

ProductsC テーブル
idcategoryproduct_name
1キャンディクールキャンディ
2チョコレートカカオ99.9%
3ケーキみるくDeショート
4キャンディもふもふキャンディ
5キャンディレモンですっぱー
6チョコレートマカダミアンナッツチョコ
7チョコレートカカオ99.9%
8キャンディミルク濃厚キャンディ
productsCC テーブル
idname
1
2
3

次のSQL文を実行すると、ProductsCC テーブルのnameフィールドには、ProductsC テーブルの最初の product_nameの値で更新されます。
  UPDATE ProductsCC SET name=product_name FROM ProductsC

実行後の ProductsCC テーブルの値は以下となります。
ProductsCテーブルの最初のレコードのproduct_nameフィールドの値である"クールキャンディ"がnameフィールドに設定されます。
productsCC テーブル
idname
1クールキャンディ
2クールキャンディ
3クールキャンディ
4クールキャンディ
著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。
最終更新日: 2023-12-23
改訂日: 2023-12-23
作成日: 2014-07-21
iPentec all rights reserverd.