안녕하세요 현재 작업중인 쿼리가 존재합니다.
해당 쿼리는 카드할인대상을 조건을 통해 출력하는 쿼리인데..
포함조건에는 채널(01) AND (상품(02) OR 협력사(03) OR 브랜드(04) 등등이 존재) 인데 쿼리가 생각처럼 잘 되지 않아 문의 드립니다.
상품테이블 A와
카드할인 테이블 B를 합쳐 원하는 데이터를 뽑아야 하는데 조건을 어떤식으로 걸어야 좋을까요?
현재 쿼리는
SELECT *
FROM (SELECT A.*
FROM ITEM_TABLE A // 상품 테이블
INNER JOIN CARD_TABLE B ON 1 = 1 // 카드 마스터 테이블
WHERE A.ITEM_CD = '123456'
AND A.ITEM_CHN = '1001001'
AND (SELECT COUNT(DISTINCT C.TARGET_CD) - COUNT(DISTINCT CASE WHEN '1001001' LIKE TRIM(C.TARGET_CD)||'%') THEN TAGET_CD ELSE NULL END)
FROM CARD_TARGET_TABLE C // 카드 대상 테이블
WHERE C.CARD_SEQ_NUM = B.CARD_SEQ_NUM
AND C.INCL_YN = '1' // 포함여부 1인 경우 포함 0인 경우 제외
AND C.USE_YN = '1') // 사용여부
AND C.TARGET_CD = '01' // 채널
) = 0 // 채널 관련
AND EXISTS (SELECT 1
FROM CARD_TARGET_TABLE C
WHERE C.CARD_SEQ_NUM = B.CARD_SEQ_NUM
AND C.INCL_YN = '1'
AND C.USE_YN = '1'
AND ((C.TARGET_CD = '02' AND C.TARGET_VAL = A.ITEM_CD)
OR (C.TARGET_CD = '03' AND C.TARGET_VAL = A.VEN_CD)
OR (C.TARGET_CD = '04' AND C.TARGET_VAL = A.BRAND_CD))));
위 와 같은데, 포함 여부에서 채널 AND (상품 OR 협력사 OR 브랜드) 라는 조건 때문에 난관입니다.. 카드대상이 채널만 등록된 경우 아래 EXISTS 부분에서 거짓으로 떨어져서 SELECT이 안되고 있습니다.. 포함조건 및 제외조건 관련하여 좋은 방법이 없을까요? ㅜㅜ
위 쿼리는 포함만 작성하였습니다.