3

以下は「正しい方法」ではなく、私が達成しようとしていることのデモンストレーションです。

SELECT
   [...]
FROM
   [...]
WHERE condition1 
  AND condition2 
  AND field IN CASE (@type)
                 WHEN 1 THEN (SELECT subquery #1)
                 WHEN 2 THEN (SELECT subquery #2)
                 WHEN 3 THEN (SELECT subquery #3)
               END

つまり、 parameter の異なる値ごとに異なるサブクエリが必要です@type。それを行う良い方法は何ですか?

4

3 に答える 3

7

これを試して

SELECT
   [...]
FROM
   [...]
WHERE
   condition1 AND condition2 AND 
   ((@type = 1 and field IN (SELECT subquery #1))
    OR (@type = 2 and field IN (SELECT subquery #2))
    OR (@type = 3 and field IN (SELECT subquery #3))
   )
于 2013-01-01T22:31:37.953 に答える
1

いいアイデアですが、次のようにテストを分割する必要があります。

これを試して:

SELECT
   [...]
FROM
  [...]
WHERE condition1 
  AND condition2 
  AND CASE (@type)
        WHEN 1 THEN (field in (SELECT subquery #1))
        WHEN 2 THEN (field in (SELECT subquery #2))
        WHEN 3 THEN (field in (SELECT subquery #3))
    END

私はこれまでこの構文を試したことがないので、うまくいかない場合は、rsの答えを使用してください。これはうまくいきます(私は以前に彼のタイプの構文を使用しました)。よりエレガントに見えるので、これがうまくいくことを願っています-うまくいくかどうか教えていただけますか?

于 2013-01-01T22:40:52.773 に答える
0

何をしようとしているのかを判断するのは非常に困難ですが、提供されている例を考慮すると、3つの「サブクエリ」のそれぞれが、IN句内の他の値と比較される値を返します。代わりに使用して調査しINNER JOINます:

SELECT
   [...]
FROM
   [...]

INNER JOIN (
   SELECT CASE WHEN @type = 1 THEN somefield
               WHEN @type = 2 THEN somefield
               WHEN @type = 3 THEN somefield
               END AS inner_field
   FROM [....]
   ) XTRA
ON XTRA.inner_field=field

WHERE
   condition1 AND condition2

もちろん、これは単なる説明です。データに一致するバージョンが必要になります。本当に3つの個別のサブクエリが必要かどうかは、それらが何をしているかに大きく依存します。JOIN重要なのは、ほとんどのデータベースが非常にうまく処理する を使用することです。

于 2013-01-01T22:50:27.453 に答える