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

Oracle SQL报错ORA-00923:预期位置未找到FROM关键字求助

错误原因排查与修正方案

核心错误点

  1. 误用保留关键字作为列别名:
    你在SELECT语句末尾将统计列命名为from,而FROM是Oracle的保留关键字,不能直接用作列别名,这导致SQL解析器逻辑混乱,触发ORA-00923错误。

  2. 子查询列别名错误添加表前缀:
    子查询中case表达式的别名写成了h.reviewed_date,列别名不需要添加表前缀,正确写法应为reviewed_date。

  3. GROUP BY子句引用无效表别名:
    外层查询的数据源是子查询my_records,不存在h表的直接引用,因此GROUP BY里的h.reviewed_date需改为my_records.reviewed_date(或直接写reviewed_date)。

修正后的完整代码

SELECT 
    my_records.my_date, 
    my_records.reviewed_date, 
    COUNT(CASE WHEN my_records.reviewed = 'Y' THEN 1 ELSE NULL END) AS reviewed_count,
    COUNT(CASE WHEN my_records.approved = 'Y' THEN 1 ELSE NULL END) AS approved_count,
    COUNT(CASE WHEN my_records.approved = 'N' THEN 1 ELSE NULL END) AS rejected_count
FROM (
    SELECT 
        h.id, 
        CASE 
            WHEN :P43_DATE_RANGES = 'Monthly' THEN TO_CHAR(h.reviewed_date, 'Month') 
            WHEN :P43_DATE_RANGES = 'Daily' THEN TO_CHAR(h.reviewed_date, 'MM/DD/YYYY') 
            WHEN :P43_DATE_RANGES = 'Weekly' THEN TO_CHAR(TRUNC(h.reviewed_date, 'IW'), 'MM/DD/YYYY')
        END AS my_date,  
        CASE 
            WHEN :P43_DATE_RANGES = 'Monthly' THEN TRUNC(date_sys, 'MM') 
            WHEN :P43_DATE_RANGES = 'Daily' THEN TRUNC(date_sys) 
            WHEN :P43_DATE_RANGES = 'Weekly' THEN TRUNC(date_sys, 'IW')
        END AS reviewed_date,
        h.reviewed, 
        h.approved
    FROM INGESTED i
    LEFT OUTER JOIN highlighted h ON i.id = h.id_ingested 
    WHERE h.reviewed_date BETWEEN TO_DATE(:P43_START_DATE) AND TO_DATE(:P43_END_DATE)
) my_records
GROUP BY my_records.my_date, my_records.reviewed_date

补充说明

  • 将原非法别名from替换为有业务意义的名称(如rejected_count),规避保留关键字冲突;
  • 移除子查询列别名的表前缀,保证语法合法性;
  • 外层GROUP BY统一使用子查询别名my_records引用列,避免表别名混淆。

内容的提问来源于stack exchange,提问作者SunnyDays

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 21:35:16