【发布时间】:2020-02-29 21:05:56
【问题描述】:
这是我在平台上的第一篇文章。
我希望this image 解释我想要做什么。 我正在尝试将表 B 合并到表 A 中。如果满足 (A.cell = B.cell AND A.object = B.objet) 的条件,那么我想用表 B 中的相应成本更新 A.cost。如果条件不满足,我想将B中的行插入A中。
到目前为止,我尝试过的是一个 upsert,但它没有用:
INSERT INTO reached_points
SELECT B.cell_id, B.object_id, B.reached_cost
FROM test_reached_cells B
ON CONFLICT (cell_id, object_id)
WHERE (cell_id = B.cell_id AND object_id = B.object_id)
DO UPDATE SET cost = B.reached_cost
我认为在 CONFLICT 之后的 WHERE 子句中,我可以定义何时“触发”该冲突。不是这样吗?我是这么认为的,因为在 documentation 中它说类似“[ON CONFLICT 目标操作;] 目标可以是:WHERE 谓词 – 带有谓词的 WHERE 子句”。
有没有办法实现更新,如果条件不满足,插入?我想避免在两个完全独立的步骤中执行此操作,因为两次比较表格似乎效率低下。
【问题讨论】:
标签: sql postgresql sql-update sql-insert