首页 > 解决方案 > 如何在 PostgreSQL 中使用内部查询编写 DELETE 语句?

问题描述

以下查询在 Oracle DB 中运行良好。相同的查询在 Postgres DB 中失败,但内部查询在 Postgres DB 中运行良好。

DELETE FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY A.RESORT, A.RESV_NAME_ID ORDER BY ACTION_ID DESC) RNK
FROM STAGE_DETAILS A ) B 
WHERE B.RNK>1;

我收到语法错误。

错误:- [代码:0,SQL 状态:42601] 错误:“(”位置或附近的语法错误:13 [脚本位置:3109 - 3110]

如何解决这个问题?

谢谢。

标签: sqlpostgresql

解决方案


使用以下语法

DELETE FROM STAGE_DETAILS A
USING (SELECT ACTION_ID,RESV_NAME_ID,ROW_NUMBER() OVER (PARTITION BY RESORT, RESV_NAME_ID ORDER BY ACTION_ID DESC) RNK
     FROM STAGE_DETAILS) B
WHERE B.RNK>1 AND B.ACTION_ID = A.ACTION_ID AND B.RESV_NAME_ID = A.RESV_NAME_ID;

推荐阅读