Oracle 使用 select 案例按查询排序

Oracle order by query using select case

在 Oracle Live SQL 中,我试图通过 sql 使用 select(case when)查询

来使用简单的订单

我试图从 tt order by 1

得到相同的结果 select *

将 1 替换为 (select (case when 1=1 then 1 else 2 end) from dual)

但是两个结果完全不同

我希望 table 按第 1 列排序,但是使用 select 的查询不按第 1 列排序。

我不知道为什么,想知道这个查询在 oracle db 中是如何工作的

当您在 ORDER BY 子句中指定一个数字时,Oracle 将按结果 select 的该列排序。例如,ORDER BY 1,2 将按第一列排序,然后是第二列。如果没有第二列,那么你会得到一个错误。

在最外层查询的 ORDER BY 中,您的查询中基本上没有发生任何排序,因为 1 总是从您的子查询返回。这是按值 1 而不是第一列排序。

如果您解释了您希望实现的逻辑,那么我们可能会提供帮助,但这就是您现有查询的情况。

比较

   ... 
   order by 2

   ... 
   order by 1+1

在“编译”时,第一个 2 是整数常量,因此它是列的位置,数据库引擎按指定列排序。第二个 1+1 是一个整数表达式,数据库引擎按此值“2”排序。同样,(select (case when 1=1 then 1 else 2 end) from dual) 是一个表达式,而不是列规范。