如何使用PostgreSQL执行MERGE(插入/更新/删除)?

时间:2018-07-30 14:36:56

标签: sql postgresql

我正在使用INSERT ... ON CONFLICT ...更新 PostgreSQL表中的一些数据。

但是,如果当前的INSERT查询未提供这些行,现在我也希望能够删除。因此,除了INSERTUPDATE之外,我还希望能够进行一次DELETE

使用SQL Server,我将使用MERGE查询和:

WHEN NOT MATCHED BY SOURCE THEN DELETE

使用PostgreSQL可以达到类似目的的推荐方法是什么?

我希望 not 不能运行两个单独的查询。

1 个答案:

答案 0 :(得分:2)

您可以为此使用CTE

WITH updated AS (
INSERT ... 
INTO tbl 
ON CONFLICT ...
RETURNING your_primary_key
)
DELETE FROM tbl t 
WHERE your_primary_key NOT IN ( 
  SELECT updated.your_primary_key FROM updated
);