0
我试图插入查询。 (如果什么都不存在,基本上插入或者如果已经有值,则更新)。 Postgres的:9.3.5UPSERT查询重复而不是覆盖
这是我的表:
box=> \d timeranges
Table "ana.timeranges"
Column | Type | Modifiers
--------+------+-----------
value | text |
我只是想更新 '价值' 栏。(如果条目存在或创建新条目)
我按照本指南编写UPSERT查询:
这是我的查询:
WITH upsert AS (UPDATE timeranges SET value=value WHERE value='abc' RETURNING *)
INSERT INTO timeranges (value) SELECT 'abc' WHERE NOT EXISTS (SELECT * FROM upsert);
第二个查询:
WITH upsert AS (UPDATE timeranges SET value=value WHERE value='abc3' RETURNING *)
INSERT INTO timeranges (value) SELECT 'abc3' WHERE NOT EXISTS (SELECT * FROM upsert);
预期结果: 将会有abc3而不是abc1。 (我想覆盖它)
我不明白什么是错的。当我从“abc”更改为“abc2”时重复条目创建为。
box=> select * from timeranges;
value
-------
abc
abc3
(2 rows)
我以为它应该覆盖它?我只想覆盖以前的条目
请帮我解决我要出错的地方。
谢谢你的时间!
这两个查询:'... SET value = value ...'不明显。第二个查询:'... WHERE value ='abc3'...'在第一个查询之后现在有'abc3'值的条目,因此新条目按照预期创建。 – Abelisto
那么,如何修改查询以便我可以覆盖新值?而不是创建一个新的? – TechnoCorner
'WITH upsert AS(UPDATE timeranges SET value ='new-value'WHERE value ='old-value'RETURNING *) INSERT INTO timeranges(value)SELECT'new-value'WHERE NOT EXISTS(SELECT 1 FROM upsert); ' – Abelisto