我有一个包含“id”、“a”、“b”、“c”、“d”列的表。另外,我对 ('a'、'b'、'c'、'd') 有一个独特的约束,因此在所有这些字段都相同的情况下不能添加任何条目。我想更新插入条目,例如我在数据库中的条目:
1 a_value b_value c_value d_value
我正在更新
INSERT INTO MYTABLE(a, b, c, d) values ('a_value', 'b_value', 'c_value', 'd_value__new') on conflict (a, b, c, d) DO UPDATE SET d= excluded.d;
但是,当我期望它将现有条目上的 d_value 更新为 d_value_new 时,这会创建新条目。我究竟做错了什么?
请参阅此处的示例:
根据我在评论中读到的内容,您希望实现以下行为:在执行 INSERT 时,如果列 (a、b、c) 的值已存在于一行中,则将该行的 d 列更新为新的价值。如果是这种情况,那么您需要将唯一约束放在 (a, b, c) NOT d上,因为使用 d 时,它不会被触发,因为您为 d) 插入了新值。还要将 ON CONFLICT 语句更改为仅检查 (a,b, c)。注意:使用此约束,您将无法拥有超过 1 行具有相同 (a, b, c) 值的行。这是这些更改的小提琴,请查看https://dbfiddle.uk/JsLZgGZW。将来,请确保您提供有关您想要实现的目标的更准确的信息,以便获得准确的答案。