gpt4 book ai didi

sql - "DO UPDATE SET"未按预期工作

转载 作者:行者123 更新时间:2023-11-29 12:57:47 24 4
gpt4 key购买 nike

我在 PHP 中使用 PDO 库,我正在生成一个 PostgreSQL 语句,如下所示:

INSERT INTO production_work (order_id, producer_id, sw)
VALUES (?,?,?)
ON CONFLICT (order_id, producer_id, day)
DO UPDATE SET sw = EXCLUDED.sw + ?
RETURNING ident

对于 PDO execute() 语句的参数,我传入数组 [7172, 10, 1, 1]

那个 production_work 表有一个 now()day 参数的默认值,这就是我不传入它的原因,并且在为 ON CONFLICT 部分列出了三个字段。

当没有冲突时,它正确地将 sw 列的值设置为 1。但是,当存在冲突时,sw 列的值当前为0,然后在该语句运行之后,sw 列以 2 而不是 1 的值结束。

我做错了什么?

最佳答案

记录 EXCLUDED 包含要插入但导致冲突的值,因此在这种情况下 EXCLUDED.sw = 1。无需再添加 1:

INSERT INTO production_work (order_id, producer_id, sw)
VALUES (?,?,?)
ON CONFLICT (order_id, producer_id, day)
DO UPDATE SET sw = EXCLUDED.sw
RETURNING ident;

如果要将给定值添加到现有的使用:

INSERT INTO production_work (order_id, producer_id, sw)
VALUES (?,?,?)
ON CONFLICT (order_id, producer_id, day)
DO UPDATE SET sw = sw + EXCLUDED.sw
RETURNING ident;

关于sql - "DO UPDATE SET"未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38779179/

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