2017-05-12 7 views
1

以下のクエリを実行しようとすると構文エラーが発生しますが、そのようなことを実行できるかどうかを知りたいのですが?だからINの中にCASEという表現があります。以下は本当に私のクエリではないので、ちょっとばかげて見えるかもしれませんが、単なる例です。WHEREカラムIN CASEタイプWHEN

SELECT * 
FROM `table` 
WHERE `category` IN 
    CASE `type` 
     WHEN 'a' THEN ('CAT1','CAT2','CAT3') 
     WHEN 'b' ('CAT4') 
     ELSE ('undefined','n/a') 
    END 
ORDER BY `category` 

ありがとうございます。

+0

を試みることができます。 JohnHCの答えを見てください! – jarlh

答えて

4

使用OR

SELECT * 
FROM `table` 
WHERE (`type` = 'a' and `category` IN ('CAT1','CAT2','CAT3')) 
OR (`type` = 'b' and `category` IN ('CAT4')) 
or (`type` not in ('a','b') and `category` in ('undefined','n/a')) 
0

あなたはそれを使用することが一般的に多くの方が良いでしょうAND/ORの代わりに、ONと句でCASE次

SELECT * 
FROM `table` 
WHERE CASE `type` 
     WHEN 'a' THEN `category` IN ('CAT1','CAT2','CAT3') 
     WHEN 'b' THEN `category` IN ('CAT4') 
     ELSE `category` IN ('undefined','n/a') 
    END 
ORDER BY `category`