Where 절에 특정 질의를 IF ELSE처럼 구현하고 싶습니다. 0 4 10,908

by 짱구 [SQL Query] oracle query case decode where if else [2016.06.09 17:13:37]


안녕하세요.

SELECT *
  FROM DUAL
WHERE CASE WHEN 'Y' = 'Y' THEN C = '6'
                          ELSE C <> '6'
                END

여기서 select * from dual은 문장 구색 맞출려고 쓴거구요

where case when 'Y'  = 'Y'   <= 앞 'Y' 는 입력 받는 값입니다.

 

** 따라서 입력에 따라 조건을 달리 하고 싶습니다.

어떤 방법이 있는지 알려주시면 고맙겠습니다.

 

감사합니다.

by jkson [2016.06.09 17:21:05]
SELECT *
  FROM DUAL
 WHERE ((:VAL = 'Y' AND C = '6')
      OR (:VAL != 'Y' AND C <> '6'))

멍청한 옵티마이저가 or 조건 많아지면 엉뚱한 실행계획 타는 경우가 있어서

되도록 그냥 쿼리 string 만들 때 조건에 따라 조건절이 달라지게 만드는 게 좋고..

그렇게 안 하려면 위 쿼리처럼 or 조건 사용하세요.


by 짱구 [2016.06.10 14:03:15]

감사합니다.


by DONKEY [2016.06.10 13:09:28]
SELECT * 
    FROM DUAL
WHERE 1 = CASE WHEN 'Y' = 'Y' AND C='6' THEN 1
               WHEN 'Y' != 'Y' AND C<> '6' THEN 1 END

이것도 되지않을까여?

 


by 짱구 [2016.06.10 14:03:30]

감사합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입