我正在使用INSERT ... ON CONFLICT ...
来更新 PostgreSQL表中的一些数据。
但是,如果当前的INSERT
查询未提供这些行,现在我也希望能够删除。因此,除了INSERT
和UPDATE
之外,我还希望能够进行一次DELETE
。
使用SQL Server
,我将使用MERGE
查询和:
WHEN NOT MATCHED BY SOURCE THEN DELETE
使用PostgreSQL
可以达到类似目的的推荐方法是什么?
我希望 not 不能运行两个单独的查询。
答案 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
);