2

次のような Oracle 選択があります。

SELECT *
  FROM CUSTOMER
 WHERE (CUSTOMER_TYPE BETWEEN 100 AND 200
     OR CUSTOMER_TYPE = 350
     OR CUSTOMER_TYPE BETWEEN 410 AND 520);

同じステートメント内で複数の範囲と個々の値の評価を組み合わせたものに変更したいと考えています。以下の構文は正しくありませんが、Oracle に相当するものはありますか?

SELECT *
  FROM CUSTOMER
 WHERE CUSTOMER_TYPE IN (100..200, 350, 410..520);
4

1 に答える 1

0

これは可能性として考えてください。

SELECT *
FROM CUSTOMER c,
(
    select level + 99 n from dual connect by level < 102
        union all
    select 350 n from dual
        union all
    select level + 409 n from dual connect by level < 112
) t
WHERE c.CUSTOMER_TYPE = t.n

ORINを回避します。運が良ければ、ハッシュ結合が結果として得られます。

于 2012-08-09T20:41:15.867 に答える