gpt4 book ai didi

postgresql - 更新冲突的新值

转载 作者:行者123 更新时间:2023-11-29 13:21:50 24 4
gpt4 key购买 nike

我想用插入语句更新一行。事实上,我可以插入行,但如果唯一属性已经存在,我想更新内容。

所以我得到了这些表

CREATE TABLE dtest (
"id" text,
followers_count int4,
someuniq int4
);
CREATE UNIQUE INDEX dtest_idx ON dtest USING btree (someuniq);

CREATE TABLE temp_data (
tid text,
tfo int4,
tuniq int4);

假设我有一个临时选项卡,我从该表中插入/更新数据

INSERT INTO temp_data VALUES ('id1',4,1);
INSERT INTO temp_data VALUES ('id2',0,2);
INSERT INTO temp_data VALUES ('id3',40,3);


INSERT INTO dtest("id","followers_count","someuniq")
SELECT t.tid, t.tfo, t.tuniq
FROM temp_data t
ON CONFLICT DO NOTHING;

我想知道是否可以用这样的方式更新值,而不是先插入然后更新

INSERT INTO dtest("id","followers_count","someuniq")
SELECT tid, tfo, tuniq
FROM temp_data
ON CONFLICT ("someuniq")
DO UPDATE SET followers_count =
(SELECT tfo FROM temp_data where tid = EXCLUDED.tid)
WHERE EXCLUDED.id = tid;

这意味着,“如果该行已经存在,则更新一些字段”,我做错了什么?

最佳答案

不需要使用子选择。 excluded 行将包含所有目标列,包括 followers_count:

INSERT INTO dtest (id, followers_count, someuniq)
SELECT tid, tfo, tuniq
FROM temp_data
ON CONFLICT (someuniq)
DO UPDATE
SET followers_count = excluded.followers_count;

关于postgresql - 更新冲突的新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40390655/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com