Oracle order by query 使用 select case
Posted
技术标签:
【中文标题】Oracle order by query 使用 select case【英文标题】:Oracle order by query using select case 【发布时间】:2021-04-23 13:56:25 【问题描述】:在 Oracle Live SQL 中,我尝试使用 select(case when)查询来使用简单的 sql 排序
我试图得到相同的结果 select * from tt order by 1
将 1 替换为 (select (case when 1=1 then 1 else 2 end) from dual)
但是两个结果完全不同。
我想要按第 1 列排序的表,但是当查询不按第 1 列排序时使用选择案例的查询。
我不知道为什么,想知道这个查询在 oracle db 中是如何工作的
【问题讨论】:
***.com/questions/54133093/… 【参考方案1】:比较
...
order by 2
和
...
order by 1+1
在“编译”时,第一个2
是一个整数常量,因此它是列的位置,数据库引擎按指定的列排序。第二个1+1
是一个整数表达式,数据库引擎按此值“2”排序。同样,(select (case when 1=1 then 1 else 2 end) from dual)
是一个表达式,而不是列规范。
【讨论】:
【参考方案2】:当您在ORDER BY
子句中指定一个数字时,Oracle 将按结果选择的该列进行排序。例如,ORDER BY 1,2
将按第一列排序,然后是第二列。如果没有第二列,则会出现错误。
在最外层查询的ORDER BY
中,您的查询中基本上没有发生排序,因为1
总是从您的子查询返回。这是按值 1
而不是第一列排序。
如果您解释了您希望实现的逻辑,那么我们也许可以提供帮助,但这就是您现有查询的情况。
【讨论】:
基于什么逻辑?您示例中的 case 语句不会按任何内容排序。 如果您有示例数据和您尝试通过该输出实现的输出,请以文本格式(而非图像)共享两者 我尝试在查询时使用 case 以 1 获得相同的结果顺序,所以首先,我在 order 后使用 select 查询,期望返回 1,最后我想从 tt order 中获取 select * 1 为什么此查询不按第 1 列排序?? 这就是 oracle 的工作原理。如果您用一些示例数据解释您试图实现的逻辑,那么也许其他人可以提供帮助。以上是关于Oracle order by query 使用 select case的主要内容,如果未能解决你的问题,请参考以下文章
cassandra SELECT Query with order by 出错