2017-12-09 10 views
0

私は現在、テーブルからSELECTカラムを選択しようとしていますが、選択した値で算術演算を行い、更新された値を同じテーブルに戻します。今のところ、私はSELECTすべての列、別のテーブルにコピーすると、UPDATEそのテーブルをコピーして戻ってコピーすると思っているが、これは冗長に思える。PostgreSQL SELECT、UPDATE、INSERTを一緒に使用します

INSERT INTO tableB (x, y) SELECT x, y FROM tableA; 

UPDATE tableB SET y = y + 1; 

INSERT INTO tableA (x, y) SELECT x, y FROM tableB; 

xyUNIQUE(x, y)

EDITを宣言されている:このトランザクションのために別のテーブルを作成しないようにする方法はありますか?

+0

その後、あなたは私の知る限り二つの文を必要としています。 2つの挿入が論理的に依存している場合は、トランザクションを使用することができます。 –

+0

私の質問は少し曖昧かもしれないと思うが、私はコピーし、1つのテーブル(この場合はtableA)の値を更新しようとしている。一時的な値を保持するためにtableBを作成しました。 – Larrrrrrrrrry

答えて

1

私が正しくあなたのロジックを読めば、あなたは唯一の可能性トランザクション内で、ここでは2つの挿入が必要になります。

BEGIN; 
    INSERT INTO tableB (x, y) SELECT x, y+1 FROM tableA; 
    INSERT INTO tableA (x, y) SELECT x, y FROM tableB 
COMMIT; 

更新あなたは、単にyのインクリメント値を挿入することができますよう、挿入が不要になった後。

+0

タイムスタンプの追加のようなものが最初のステートメントでインターバルを働かせますか? – Larrrrrrrrrry

+0

@Larrrrrrrrrryもしそれがどんな選択でも機能するならば、ここで動作するはずです。私は2つの挿入が必要だと思うが、更新は私には不要に見える。 –

+0

私はそれを試してみるよ、ありがとう! – Larrrrrrrrrry

2

あなたが変更されたデータをコピーしたい場合は、1つのインサートを有することを行うことができます:あなたは2つの異なるテーブルに挿入したい場合は

insert into tablea (x,y) 
select x, y + 1 
from tablea; 
+0

私は値をコピーしようとしていますが、直接更新しません。古い値は残るはずです。挿入される新しい値は古い値に依存します。申し訳ありませんが、少し混乱している場合。 – Larrrrrrrrrry

+0

これは1つのステートメントで行うことができます –

関連する問題