2017-05-12 4 views
1

아래 쿼리를 실행하려고 할 때 구문 오류가 발생하지만이를 실행할 수 있는지 알고 싶습니다. 따라서 IN에는 CASE이라는 표현이 있습니다. 다음은 실제로 내 쿼리가 아니기 때문에 약간 어리석은 것처럼 보일 수 있지만 예를 들어 있습니다.where where IN CASE type 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

그것은 일반적으로 더 나은 ON 및 조항에 AND/OR 대신 CASE의 사용에있어 시도 할 수 있습니다. 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

는 다음과 같은

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`