我有以下查询:
INSERT INTO ReservationCounter (student_id, reservation_count) VALUES (1, 1)
ON CONFLICT (student_id) DO
UPDATE SET reservation_count=excluded.reservation_count+1;
Run Code Online (Sandbox Code Playgroud)
当没有冲突时就INSERTS成功了。
然而,当存在冲突时,该UPDATE语句实际上并不用增量更新值。
当我第一次在冲突时运行它时,它会按预期返回 2,但是当我再次运行它时,我希望它会增加 2 到 3(因为reservation_count=excluded.reservation_count+1)。它没有这样做,它再次返回 2;让我相信那reservation_count总是 1。
我究竟做错了什么?
小智 8
您将reservation_count 设置为插入的值+ 1,而不是增加当前值。
您可能希望将提供的计数添加到现有计数中。
SET reservation_count = reservationcounter.reservation_count + excluded.reservation_count;
Run Code Online (Sandbox Code Playgroud)