2

我需要使用表的可为空列上的列的值来选择整数的三个值之一。

至少有两种方法:1)使用 SQL 完成所有工作:测试空值,并在其他值之间进行选择,或者 2)读取值并使用代码(在本例中为 Java)进行选择。

哪个“更好”,即。更容易理解和更易于维护?您是否有任何其他指标用于决定?

例如,我有以下代码:

// If id is equal to:
//   -1, then make v = 1
//   null, then make v = 2
//   in any other case, make v = 3

// Option 1:
int v;
String query = "SELECT CASE min(Id) WHEN NULL THEN 2 WHEN -1 THEN 1 ELSE 3 END AS Id"
        + "FROM TableA WHERE SomeField IN (SELECT ...blah blah...)";
ResultSet rs = // execute query
if (rs.next()) {
    v = rs.getInt("Id");
} else {
    // TODO something went *very* wrong...
}

// Option 2:
int v;
String query = "SELECT CASE min(Id) Id"
        + "FROM TableA WHERE SomeField IN (SELECT ...blah blah...)";
ResultSet rs = // execute query
if (rs.next()) {
    final int id = rs.getInt("Id");
    if (rs.wasNull()) {
        v = 2;
    } else if (id == -1) {
        v = 1;
    } else {
        v = 3;
    }
} else {
    // TODO something went *very* wrong...
}
4

2 回答 2

1

如果查询不是很复杂(平均在合理的时间内执行),我会选择 SQL。如果查询是10分钟,最好试试java。但如果数据库可以为我完成这项工作,我总是更喜欢 sql 方法。

(只是我评论的副本)

于 2014-02-11T18:48:52.387 回答
1

我会说让 SQL 来完成这项工作。这是相当微不足道的,不会占用 CPU 时间,而且 SQL 无论如何都必须将相关信息加载到内存中,因此它已经在那里进行处理。在应用程序端执行此操作,在某种程度上,您似乎必须“重新编排”数据以进行分析,而且(恕我直言)Java 代码似乎更难以通读和理解。

请注意,您的 SQL 代码中有一个小缺陷,您不能WHEN NULL在 case 语句中使用这种方式。你想要类似的东西

...case
     when min(Id) is null then 2
     when min(Id) = -1 then 1
     else 3
   end
于 2014-02-11T18:43:56.513 回答