You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行Oracle CTE查询时遇ORA-00928缺失SELECT关键字错误,请求修正查询以查找重复行

修正ORA-00928错误:查找重复行的Oracle查询

嘿,这个错误原因很明确——你定义了CTE(公共表表达式)RowNumCTE,但没有在它后面跟上实际查询这个CTE的SELECT语句,Oracle自然会提示你缺少SELECT关键字啦!

你的CTE已经正确地给每组重复记录分配了行号(分组依据是parcelid、PROPERTYSPLITADDRESS等字段),但数据库不知道你要从这个CTE里获取什么数据,所以必须补充后续的查询逻辑。

修正后的查询(找出所有重复行)

如果你的目标是筛选出所有重复的记录,也就是每组中不是第一个出现的行(行号rn > 1),可以用这段代码:

with RowNumCTE as (
    SELECT 
        id,
        parcelid,
        PROPERTYSPLITADDRESS,
        SALEDATECONVERTED,
        SALEPRICE,
        LEGALREFERENCE,
        ROW_NUMBER() OVER(PARTITION BY parcelid,PROPERTYSPLITADDRESS,SALEDATECONVERTED,SALEPRICE,LEGALREFERENCE order by id) rn
    from housedata
)
SELECT * 
FROM RowNumCTE
WHERE rn > 1;

说明:

  1. 在CTE里,我把需要查看的字段都明确列了出来(包括主键id和行号rn),方便后续查看重复项的细节;
  2. 最后的SELECT * FROM RowNumCTE WHERE rn > 1是核心:它从CTE中筛选出分组内行号大于1的记录,这些就是你要找的重复行。

可选:查看所有行及分组行号

如果只是想查看所有记录以及它们在各自分组中的行号(方便确认哪些是重复项),可以去掉WHERE条件:

with RowNumCTE as (
    SELECT 
        id,
        parcelid,
        PROPERTYSPLITADDRESS,
        SALEDATECONVERTED,
        SALEPRICE,
        LEGALREFERENCE,
        ROW_NUMBER() OVER(PARTITION BY parcelid,PROPERTYSPLITADDRESS,SALEDATECONVERTED,SALEPRICE,LEGALREFERENCE order by id) rn
    from housedata
)
SELECT * 
FROM RowNumCTE;

内容的提问来源于stack exchange,提问作者Mohammad Liton Hossain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 17:27:32