예를 들어 같은 테이블에서 조건만 다른 것들을 합쳐서 추출하려고 할때요. 무식(?) 하게는
SELECT HPNO, 'A1' KIND FROM TB_1 WHERE VALID_DATE = TO_CHAR(SYSDATE + 1, 'YYYYMMDD') UNION ALL SELECT HPNO, 'A2' KIND FROM TB_1 WHERE VALID_DATE = TO_CHAR(SYSDATE + 7, 'YYYYMMDD') UNION ALL SELECT HPNO, 'A3' KIND FROM TB_1 WHERE VALID_DATE = TO_CHAR(SYSDATE + 30, 'YYYYMMDD')
이걸 아래와 같이 SELECT 절에서 CASE 로 표현 하기도 할텐데요.
SELECT HPNO, CASE WHEN VALID_DATE = TO_CHAR(SYSDATE+1,'YYYYMMDD') THEN 'A1' WHEN VALID_DATE = TO_CHAR(SYSDATE+7,'YYYYMMDD') THEN 'A2' WHEN VALID_DATE = TO_CHAR(SYSDATE+30,'YYYYMMDD') THEN 'A3' END AS KIND FROM TB_1 WHERE ( VALID_DATE = TO_CHAR(SYSDATE + 1, 'YYYYMMDD') OR VALID_DATE = TO_CHAR(SYSDATE + 7 'YYYYMMDD') OR VALID_DATE = TO_CHAR(SYSDATE + 30, 'YYYYMMDD') );
이런 방법 말고 다른 방법이 또 있을까요?
* VALID_DATE 는 인덱스 걸려있고 VARCHAR2 형태입니다.
첫번째가 COST 덜 들듯한데 ㅎㅎㅎ 잘모르겟네요.
VALID_DAT가 유니크 하지 않으시면 RANGE SCAN으로 처리하겠죠.
OR이 풀탄다는건 잘못된 소문입니다.
http://wiki.gurubee.net/pages/viewpage.action?pageId=4949506