相关疑难解决方法(0)

在PostgreSQL中重复更新时插入?

几个月前,我从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文档中的哪个被覆盖.

为了澄清,我想插入几个东西,如果它们已经存在则更新它们.

sql postgresql upsert sql-merge

611
推荐指数
15
解决办法
40万
查看次数

无法从postgres中的UPDATE RETURNING子句中选择

我将问题与更复杂的查询隔离开来.这里是测试场景

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;"测试"

为什么我的初始陈述没有得到相同的结果?

sql postgresql

14
推荐指数
3
解决办法
2万
查看次数

标签 统计

postgresql ×2

sql ×2

sql-merge ×1

upsert ×1