我將問題從更復雜的查詢中分離出來。這裏的測試場景無法從UPDATE RETURNING子句中選擇postgres
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)
,我發現了以下錯誤:
錯誤:語法錯誤或接近 「測試」 LINE 1: SELECT * FROM test WHERE id(UPDATE test set description ='test'RE ... ^
*** Fehler ** *
錯誤:在語法錯誤或接近 「測試」 SQL狀態:42601 賊臣:37
但是如果我只運行statemennt
UPDATE test set value='test' RETURNING id
我得到2行的結果:
如果我分別代替該結果我會像的查詢:
SELECT * FROM test WHERE id IN (1,2);
其結果:
1; 「測試」 2; 「測試」
爲什麼我的初始陳述沒有得到同樣的結果?
他們必須是獨立的語句。兩行正在更新的事實可能會導致問題,當多個行/值返回時,從未嘗試返回。 –