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