0

これは、単純な「レコードが存在するか」という質問に対して最も安全で最適なコードですか。

. . . // "oc" is an OracleConnection component
const string sql = "SELECT COUNT(*) FROM CONGRESS WHERE IQ > WEIGHT"; //Most politicians have more pounds than sense
try {
    using (OracleCommand ocmd = new OracleCommand(sql, oc)) {
        return Convert.ToInt32(ocmd.ExecuteScalar()) > 0;
    }
. . . // the rest elided to spare the vertical scroll-bar bearings

4

1 に答える 1

3

何かのようなもの

SELECT 1
  FROM dual
 WHERE EXISTS( SELECT 1
                 FROM congress
                WHERE iq > weight )

正確なカウントを取得するためにテーブル全体をスキャンするのではなく、一致する行が1つ見つかるとすぐに、Oracleがクエリの実行を停止できるため、おそらく最も安全なオプションです。何かのようなもの

SELECT COUNT(*) 
  FROM congress
 WHERE iq > weight
   AND rownum <= 1

同じことをする必要があります。私の考えでは、最初のクエリはあなたの意図をより表現しますが、それはもう少し冗長でもあります。

于 2012-06-14T17:42:28.433 に答える