java - 依赖 order by 中空值的顺序是否安全?

标签 java database oracle null sql-order-by

我刚刚遇到了这段代码,对我来说它似乎有点脆弱:

String statement = "select * from SOURCE where category = ? order by sub_category desc";
...
List<Source> results = query.list();

/* If we get more than one result return the one with the null sub-category 
 (the 'order by' should make the first record the one with the null): */
if(results.size() > 0) {
    return results.get(0);
}else{
    return null;
}

无论如何我都要重构它,但我的好奇心已经被点燃了!

在 order by 子句中依赖 null 的排序是否安全?订购数据库是特定的还是有独立于供应商的共识?

最佳答案

空值的顺序是特定于数据库的。比如说,MSSQL 将空值视为“小于任何其他值”,因此空值将在 ASC 排序中排在第一位,在 DESC 排序中排在最后。默认情况下,Oracle 将空值视为“大于任何其他值”,但它有特殊的语法,ORDER BY column ASC|DESC NULLS FIRST|LAST,因此开发人员可以显式地将空值放入所需的位置。等等。

关于java - 依赖 order by 中空值的顺序是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28367942/

相关文章:

database - SQL Developer 解释计划中断

sql - Oracle SQL错误处理: catching the SQL-statement

java - 如何在 Java 中使用 XPath 解析带有内部引用的 SOAP 响应

php - mysql - 如何向列添加计数器?

java - hibernate 乐观锁和集合的问题

mysql - 如何使数据库轮询可扩展?

sql - 消息 16929,游标为只读 - 为什么?

oracle - Oracle 数据库 10G 中用于存储经纬度的数据类型

java - 从 Firebase 数据库读取

java - GWT + MySQL - 如何创建连接?