SQL Serverで異なるデータベース間でのselect結果でレコードを更新するSQLは「他のデータベースのテーブルのselectの結果でUpdateする」の記事を参照してください。
他のテーブルのレコードや、他のテーブルを条件を指定して取得したレコードの値でレコードを更新するSQL文を紹介します。
他のテーブルのレコードや他のテーブルから取得したレコードで更新する場合には、UPDATE文のFROM句にテーブル名を指定します。条件を設定する場合にはWHERE句を記述します。
または
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 |
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テーブルは以下の状態になります。
id | name | value |
---|---|---|
1 | Penguin | 250 |
2 | Whale | 880 |
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 |
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テーブルは以下の状態になります。
id | name | value | category |
---|---|---|---|
1 | Penguin | ||
2 | Whale | 880 | Mammal |
id | category | product_name |
---|---|---|
1 | キャンディ | クールキャンディ |
2 | チョコレート | カカオ99.9% |
3 | ケーキ | みるくDeショート |
4 | キャンディ | もふもふキャンディ |
5 | キャンディ | レモンですっぱー |
6 | チョコレート | マカダミアンナッツチョコ |
7 | チョコレート | カカオ99.9% |
8 | キャンディ | ミルク濃厚キャンディ |
id | name |
---|---|
1 | |
2 | |
3 |
次のSQL文を実行すると、ProductsCC テーブルのnameフィールドには、ProductsC テーブルの最初の product_nameの値で更新されます。
UPDATE ProductsCC SET name=product_name FROM ProductsC
実行後の ProductsCC テーブルの値は以下となります。
ProductsCテーブルの最初のレコードのproduct_nameフィールドの値である"クールキャンディ"がnameフィールドに設定されます。
id | name |
---|---|
1 | クールキャンディ |
2 | クールキャンディ |
3 | クールキャンディ |
4 | クールキャンディ |