我需要使用表的可空列上的列值来选择整数的三个值中的一个。
至少有两种方法:1)使用SQL完成所有工作:测试空值,并在其他值之间进行选择,或者2)读取值并使用代码 - 在这种情况下选择Java-。 / p>
哪一个是“更好”,即。更容易理解和更可维护?您是否有其他指标用于决定?
举个例子,我有以下代码:
// 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...
}
答案 0 :(得分:1)
我说有SQL做这项工作。它是相当简单的,不会吸收CPU时间,并且SQL必须在内存中加载相关信息,因此它已经存在进行处理。在应用程序端执行此操作,在某种程度上,您似乎必须“重新分级”数据以进行分析,并且(imho)java代码似乎更难以阅读和理解。
请注意,SQL代码中存在一个小缺陷,您不能在case语句中使用WHEN NULL
。你想要像
...case
when min(Id) is null then 2
when min(Id) = -1 then 1
else 3
end
答案 1 :(得分:1)
如果查询不是很复杂(意味着在合理的时间内执行),我会选择SQL。如果查询是10分钟,最好试试java。但是如果DB可以为我做这个工作,我总是会更喜欢sql方法。
(只是我的评论的副本)