같은 테이블 2번 사용으로 성능 개선 위해 조인으로 변환 어떻게 해야할까요? 0 1 719

by 아무나제길 [SQL Query] [2022.05.15 09:19:14]


SELECT PRDT_CD, PRDT_NM,
CASE WHEN PRDT_SCLS_CD IN ('10', '11', '13', '14', '15', '18', '19', '20') THEN '1호'
     WHEN PRDT_SCLS_CD = '24' AND (SELECT STK_TXTN_DCD FROM DB1 WHEN PRDT_CD = :prdt_cd) IN ('1', '4') THEN '1호'
     WHEN PRDT_SCLS_CD = '24' AND (SELECT STK_TXTN_DCD FROM DB1 WHEN PRDT_CD = :prdt_cd) IN ('2', '3'. '5') THEN '2호'
     WHEN PRDT_SCLS_CD = '12', '6', '17', '21', '22', '23', '26', '10', '11') THEN '2호'
     END AS BASS_CD
FROM DB2

WHERE PRDT_CD = :prdt_cd

by 마농 [2022.05.15 23:50:36]

1. db1 의 prdt_cd 가 유일해야만 조인이 가능합니다.
- prdt_cd 가 여러건이 가능하다면?
- 조인을 하게 되면 자료가 중복되어 여러번 나오게 됩니다.
2. base_cd 구분이 모호합니다.
- 1호와 2호의 조건 (10, 11) 이 중복되네요?
 

SELECT a.prdt_cd
     , a.prdt_nm
     , CASE WHEN a.prdt_scls_cd IN ('10', '11', '13', '14', '15', '18', '19', '20')
              OR b.stk_txtn_dcd IN ('1', '4')      THEN '1호'
            WHEN a.prdt_scls_cd IN ('12', '6', '17', '21', '22', '23', '26')
              OR b.stk_txtn_dcd IN ('2', '3'. '5') THEN '2호'
        END AS bass_cd
  FROM db2 a
  LEFT OUTER JOIN db1 b
    ON a.prdt_scls_cd = '24'
   AND a.prdt_cd = b.prdt_cd
 WHERE a.prdt_cd = :prdt_cd
;

 

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