by 겨울이불 [2018.12.21 17:46:17]
안녕하세요 ! 질문이있습니다.
찾아보면...
WHERE절에 필드명 IN (CASE WHEN 비교값1 = 비교값2 THEN ('결과1') 는 되는데 ('결과1','결과2')는 안된다고 하네요~ㅜ
혹시 다른게 구현하는 방법이 있을까요?
where 필드명 in ( 결과 , 결과2 )
비교값에따라 IN구문이 달라져야되서요 ~
WHERE 필드명 IN ( SELECT '결과1' FROM DUAL UNION ALL SELECT '결과2' FROM DUAL) -- SQL로 서브쿼리가 만들어지면 가능합니다.
근데 저 결곽값에 NULL이들어가면..조회가안될까요?
('1','2' NULL) 을 같이 조회하고싶어서요;;;
CASE나 DECODE 사용해서 NULL값 비교는 안되는거같아서요...;;
In 에 null 은 안됩니다.
CASE 문의 결과는 "값"이 와야 합니다. "식"이 올 수는 없습니다.
WHERE 절에서는 여러개의 AND 와 OR 를 엮어서 다양한 조건을 줄 수 있습니다.
굳이 CASE 를 사용할 필요가 없습니다.
SELECT *
FROM t
WHERE ( 비교값1 = 비교값2 AND 필드명 = '결과1' )
OR ( 비교값1 = 비교값3 AND 필드명 IN ('결과1'. '결과2') )
OR ( 비교값1 = 비교값4 AND (필드명 IN ('결과1'. '결과2') OR 필드명 IS NULL) )
;
그러게요~
저도 곰곰히 생각해보니 이런식으로 짤수있는 쿼리였는데...;;
암튼 감사합니다.!!
저는 코드값을 맞춰 설계해서 Like문으로 했습니다.
WHERE Type LIKE CASE WHEN '{0}' = 'IA' THEN 'I%' ELSE '{0}' END