안녕하세요 현재 작업중인 쿼리가 존재합니다.
해당 쿼리는 카드할인대상을 조건을 통해 출력하는 쿼리인데..
포함조건에는 채널(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이 안되고 있습니다.. 포함조건 및 제외조건 관련하여 좋은 방법이 없을까요? ㅜㅜ
위 쿼리는 포함만 작성하였습니다.
ITEM_TABLE 과 CARD_TABLE 의 직접 연결되는 키는 없나요?
직접 연결되는 키는 따로 없고 TARGET_CD에 따른 VAL 로 구분하고있습니다 EX ) ITEM_CD = TARGET_VAL 이런식으로여
CARD_TABLE은 CARD_TARGET_TABLE 과 위와 같이 연결됩니다. ITEM_TABLE은 상품의 정보만 가져오고 있습니다.
AND (SELECT COUNT(DISTINCT C.TARGET_CD)
이부분 쿼리가 좀 이상하긴 한데...
먼저 저 조건에 해당하는 CARD_TABLE 와 CARD_TARGET_TABLE 의 정보를 구하시고 나서 ITEM_TABLE 와 조인해야 하는거 같이 보이네요..
SELECT *
FROM ITEM_TABLE A
, (SELECT * FROM CARD_TABLE, CARD_TARGET_TABLE WHERE ... ) B
WHERE A....
이런 식으로요..