2

如果我想按一列排序一个表,但将一个指定的行提取到顶部,在 MySQL 中,我可以做这样的事情......(小提琴

select * from name
order by surname != 'moon', surname

但是,当我想在 oracle 中执行此操作时,order by 子句中的真实测试不起作用,我最终不得不做这样的事情......(小提琴

select surname from name 
order by case when surname = 'moon' then 0 else 1 end, surname 

Oracle 不支持 order by 子句中的真实测试的原因是什么?

(甚至是与此相关的 select 语句)


结果

(所有都按字母顺序排列,除了moon浮动到顶部)

SURNAME
moon
adane
bell
day
larkin
williams
4

1 回答 1

7

我希望答案归结为 Oracleboolean在 SQL 中没有数据类型(PL/SQL 中有布尔值)这一事实。表达式a != b必须计算为布尔值,并且 SQL 需要能够将其作为一流的数据类型来处理,以便执行类似的操作ORDER BY或将其返回到SELECT列表中。

您发布的case声明或同等声明DECODE可能是您最好的选择。您可以通过创建一个用户定义的布尔类型来执行一些方法来对结果进行排序并使用它来评估您的条件. 但这比您CASE陈述要多得多。

于 2013-08-20T19:54:49.573 回答