37
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ある列の値だけを変えてレコードをコピーしたい

Posted at

PostgreSQL です。
次のような item テーブル

品名 価格 所有者
りんご ¥150 田島
みかん ¥89 田島
すいか ¥780 田島

を、

品名 価格 所有者
りんご ¥150 田島
みかん ¥89 田島
すいか ¥780 田島
りんご ¥150 鈴木
みかん ¥89 鈴木
すいか ¥780 鈴木

のように「所有者」列だけ変えて複製(コピー)したいです。

普通の

INSERT INTO item
SELECT '鈴木' as 所有者, * 
FROM   item
WHERE  所有者 = '田島'

では、列数が合わないのでエラーになっていまいます。
INSERT または SELECT に列を列挙すればできるけど、こういうことをしたいテーブルが100くらいあるので、とてもやってられません。

そんなときは、

CREATE TEMPORARY TABLE tmp_item FROM item WHERE 所有者='田島';
UPDATE tmp_item set id = '鈴木';
INSERT INTO item SELECT * FROM tmp_item;

というように、別のテーブルを経由するとよいです。 CREATE TEMPORARY TABLE tmp_item tmp_item としているので、このテーブルはDBから切断すると消えます。

SQL Server の場合こんな感じになります(@tonkun_no さんありがとうございました。)

参考

37
34
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
37
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?