几个月前,我从Stack Overflow的答案中学到了如何使用以下语法在MySQL中一次执行多个更新:
INSERT INTO table (id, field, field2) VALUES (1, A, X), (2, B, Y), (3, C, Z)
ON DUPLICATE KEY UPDATE field=VALUES(Col1), field2=VALUES(Col2);
Run Code Online (Sandbox Code Playgroud)
我现在切换到PostgreSQL,显然这是不正确的.它指的是所有正确的表,所以我认为这是使用不同关键字的问题,但我不确定PostgreSQL文档中的哪个被覆盖.
为了澄清,我想插入几个东西,如果它们已经存在则更新它们.
我将问题与更复杂的查询隔离开来.这里是测试场景
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');
Run Code Online (Sandbox Code Playgroud)
如果我运行查询:
SELECT * FROM test WHERE id IN (UPDATE test set description='test' RETURNING id)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
错误:"test"或其附近的语法错误第1行:SELECT*FROM test WHERE id(UPDATE test set description ='test'RE ... ^
*** Fehler ***
错误:"test"或其附近的语法错误SQL状态:42601 Zeichen:37
但是,如果我只运行国家政府
UPDATE test set value='test' RETURNING id
Run Code Online (Sandbox Code Playgroud)
我得到一个2行的结果:
1 2
如果我代表结果,我会有一个查询,如:
SELECT * FROM test WHERE id IN (1,2);
Run Code Online (Sandbox Code Playgroud)
结果:
1;"测试"2;"测试"
为什么我的初始陈述没有得到相同的结果?