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

Oracle使用Union、Order By和Rownum出现ORA-00904错误如何解决?

报错原因

UNION 拼接的两个内层子查询仅返回了amt字段,未将排序依赖的CreationDate字段包含在返回结果集中,因此外层执行ORDER BY CreationDate DESC时,数据库无法识别该字段,触发ORA-00904标识符无效错误。

解决方法

调整内层查询逻辑,将CreationDate加入UNION两侧子查询的返回字段中,保证排序字段可被正常识别即可。
修正后的SQL示例如下:

SELECT amt
  FROM (SELECT amt, CreationDate
        FROM MyTable1
        UNION
        SELECT amt, CreationDate
        FROM MyTable2
        ORDER BY CreationDate DESC)
 WHERE rownum = 1;

你使用的是Oracle 12c及以上版本,也可以用更简洁的FETCH语法实现取第一条的需求:

SELECT amt
FROM (
    SELECT amt, CreationDate FROM MyTable1
    UNION
    SELECT amt, CreationDate FROM MyTable2
)
ORDER BY CreationDate DESC
FETCH FIRST 1 ROW ONLY;
注意事项
  • UNION要求两侧查询的字段数量、数据类型完全匹配,因此必须给两个子查询都加上CreationDate返回字段,不能仅给单侧添加
  • 如果合并两个表的结果时不需要去重,可以将UNION替换为UNION ALL,能大幅提升查询性能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:24:03