Oracle SQL报错ORA-00923求助:FROM关键字位置异常
ORA-00923: FROM keyword not found where expected 错误解决方案
问题原因
Oracle SQL不允许在SELECT子句中直接将*与其他列表达式(比如你使用的RANK()函数)并列使用,这就是报错指向select *,'的核心原因——Oracle无法解析这种语法结构。
修复方案
有两种可行的修改方式,都能保留你的排名逻辑:
方案1:显式列出所有列
将*替换成CTE中定义的具体列名,再添加排名列:
with counts AS ( select country_cd, count(*) as cnt from country_use_def group by country_cd) select country_cd, cnt, RANK() OVER(ORDER BY cnt DESC) as rank from counts;
方案2:用表别名限定*
通过CTE的名称作为表别名来限定*,明确指定是该表的所有列,再添加排名列:
with counts AS ( select country_cd, count(*) as cnt from country_use_def group by country_cd) select counts.*, RANK() OVER(ORDER BY cnt DESC) as rank from counts;
说明
方案1的优势是直观清晰,能明确看到查询返回的所有列;方案2更便于维护,后续若CTE的列有变动,无需修改SELECT子句的列列表。
内容的提问来源于stack exchange,提问作者BigJim
相关产品推荐
相关产品推荐

