我有以下 SQL:
UPDATE table_name as t
set value = c.value
from (values(10, 'key_1', 60),(11, 'key_2', 10)) as c(id, key, value)
where t.id = c.id and t.key = c.key
这仅在表中已经存在给定的“id”和“key”的情况下才有效。但是,如果数据库中存在“id”和“key”,我需要使其更新值,如果不存在,则使用给定的“id”、“key”和“value”插入新行。
我把这个例子作为一个 UPSERT 工作,但只适用于一组值:
WITH upsert AS (
UPDATE table_name
SET value=80
WHERE id=10
AND key='key_1' RETURNING *
)
INSERT INTO table_name (id, key, value)
SELECT 10, 'key_1', 10
WHERE NOT EXISTS (SELECT * FROM upsert);
我不确定如何将其合并到我的案例中以使用多个值(第一个示例与 UPDATE)。
我没有唯一的约束或索引(id, "key")