运行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;
说明:
- 在CTE里,我把需要查看的字段都明确列了出来(包括主键
id和行号rn),方便后续查看重复项的细节; - 最后的
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
相关产品推荐
相关产品推荐

