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)
是一个表达式,而不是列规范。
在 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)
是一个表达式,而不是列规范。