繁体   English   中英

Oracle 使用 select 案例查询订单

[英]Oracle order by query using select case

在 Oracle Live SQL 中,我试图使用 sql 的简单订单,使用 Z99938282F04071859941E 查询(查询时)

select * from tt order by 1

select * from tt order by (select (case when 1=1 then 1 else 2 end) from dual

我试图得到相同的结果 select * from tt order by 1

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

但两个结果完全不同。

我想要按第 1 列排序的表,但是当查询不按第 1 列排序时,使用 select 情况的查询。

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

相比

   ... 
   order by 2

   ... 
   order by 1+1

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

当您在ORDER BY子句中指定一个数字时,Oracle 将按生成的 select 的该列排序。 例如, ORDER BY 1,2将按第一列排序,然后是第二列。 如果没有第二列,则会出现错误。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM