banweili008 2022-08-01 20:06
浏览 50
已结题

ORACLE 报错 ORA-01791:不是SELECTed表达式,但是再嵌套一层就不会报错,求学长学姐们告知原理

ORACLE 报错 ORA-01791:不是SELECTed表达式,但是再嵌套一层就不会报错,求学长学姐们告知原理
代码1:
SELECT DISTINCT AAA
FROM (SELECT 'aaa' AAA ,1 NNN FROM DUAL
      UNION
      SELECT 'bbb' AAA ,2 NNN FROM DUAL)
ORDER BY NNN
代码2:
SELECT * 
FROM (SELECT DISTINCT AAA
      FROM (SELECT 'aaa' AAA ,1 NNN FROM DUAL
            UNION
            SELECT 'bbb' AAA ,2 NNN FROM DUAL)
      ORDER BY NNN)
ORDER BY AAA
代码1报错内容:

img

代码2运行结果:

img

百度之后,我能理解为什么代码1报错,但是不太明白代码2为什么不报错;
对于代码2不报错的原因,我只能先粗浅理解为:内层order by 的字段只要是表中存在的字段,sql编译的时候就能通过编译,而实际执行时,当外层sql语句已经有order by后,就不会再去执行子查询的order by了,或者子查询的order by语句直接就会被数据库的优化器过滤、忽略掉

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 8月9日
    • 创建了问题 8月1日

    悬赏问题

    • ¥30 vmware exsi重置后登不上
    • ¥15 易盾点选的cb参数怎么解啊
    • ¥15 MATLAB运行显示错误,如何解决?
    • ¥15 c++头文件不能识别CDialog
    • ¥15 Excel发现不可读取的内容
    • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题
    • ¥20 yolov5自定义Prune报错,如何解决?
    • ¥15 电磁场的matlab仿真
    • ¥15 mars2d在vue3中的引入问题
    • ¥50 h5唤醒支付宝并跳转至向小荷包转账界面