sql - 如何在 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]
如何解决这个问题?
谢谢。
解决方案
使用以下语法
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;
推荐阅读
- python - 如何在我的 view.py 中正确包含带有 .save() 的表单
- python - 如何用 tkinter 制作计时器?
- python - 如何更改 Windows 10 上的时区?
- python - 当 sharex=True 时 Pandas 子图丢失数据(错误?) - 添加数据
- excel - 是什么导致整个 ListBox 列为空?
- python - 如何使嵌入矩阵中的某些特定行等于零
- c# - .Net Core 2.x 用户会话意外退出共享主机
- matlab - 在 MATLAB 中从方程中提取变量
- sql - 如何将 SQL 作业失败记录到日志表?
- excel - 为什么即使在我更新以在 64 位系统上使用后,此代码也无法运行?