私はpostgresでこのようなことをやろうとしています:
UPDATE table1 SET (col1, col2) = (SELECT col2, col3 FROM othertable WHERE othertable.col1 = 123);
INSERT INTO table1 (col1, col2) VALUES (SELECT col1, col2 FROM othertable)
しかし、ドキュメント(http://www.postgresql.org/docs/9.0/static/sql-update.html)で言及されているように、postgres 9.0でもポイント1は不可能です。
また、ポイント2が機能していないようです。次のエラーが発生します。サブクエリは1つの列のみを返す必要があります。
誰かが私のための回避策を持っていると思います。それ以外の場合、クエリにはかなりの時間がかかります:(。
参考:別のアプリケーションが準備されたデータを簡単にフェッチできるように、いくつかのテーブルから異なる列を選択して一時テーブルに格納しようとしています。