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 さんありがとうございました。)
@amay077 SQLServer
— tonkun (@tonkun_no) 2017年3月7日
select * into #wktbl from tbl1
alter table #wktbl drop column id
insert into tbl2 select 1 as id ,* from #wktbl
ダサいですね・・・