2

テーブルの null 許容列の列の値を使用して、整数の 3 つの値のいずれかを選択する必要があります。

少なくとも 2 つの方法があります。1) SQL を使用してすべての作業を行う: null 値をテストし、他の値から選択するか、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に仕事をさせてください。それはかなり些細なことであり、CPU 時間を吸収することはありません。また、SQL は関連情報をメモリにロードする必要があるため、処理のために既に存在しています。アプリ側でそれを行うと、ある程度、分析のためにデータを「再ステージング」する必要があるように思われ、(imho) Java コードを読んで理解するのがより困難に思えます。

WHEN NULLSQL コードに軽微な欠陥があることに注意してください。caseステートメントでそのように使用することはできません。あなたは次のようなものが欲しいでしょう

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