これは、はるかに複雑なクエリから問題を除外します。ここではテストシナリオpostgresのUPDATE RETURNING句からSELECTできません
DROP TABLE test;
CREATE TABLE test (
id integer,
description varchar(100)
);
INSERT INTO test(id, description) VALUES (1,'new');
INSERT INTO test(id, description) VALUES (2,'new');
私は、クエリを実行する場合:
SELECT * FROM test WHERE id IN (UPDATE test set description='test' RETURNING id)
私は次のエラーを取得しています:
ERROR:構文でエラーまたは近くに "テスト" LINE 1: SELECT * FROMテストWHERE id(更新テストセットの説明= 'テスト' RE ... ^
*** Fehler ** *
ERROR:構文エラーまたはその付近 "テスト" SQLステータス:42601 ゼッケン:37
しかし、私は唯一のstatemennt
を実行する場合 :私は2行との結果を得UPDATE test set value='test' RETURNING id
私はその結果をsubstitude場合は私のようなクエリなければなりません。結果
SELECT * FROM test WHERE id IN (1,2);
:
1; "テスト" 2; "テスト"
を私は最初の声明で同じ結果を得ないのはなぜですか?
を彼らは別々のステートメントでなければなりません。 2つの行が更新されているという事実により、問題が発生する可能性があります。複数の行/値が戻ってきたときには、RETURNINGを試みることはありません。 –