특정 조건에서만 Where절의 AND문 타는 방법 1 3 172

by DB초보 [SQL Query] [2021.07.16 09:58:43]


안녕하세요!

 

지금 쿼리를 짜는 중에 특정 조건에서만 원하는 AND절을 태우고 싶은데 방법을 모르겠어요...ㅜ.ㅜ

 

   WHERE A.CO_ID   = B.CO_ID
      AND   A.VOY_NO = B.VOY_NO
      AND   A.VOY_NO = C.VOY_NO 
      AND   A.VOY_NO = D.VOY_NO
      <IF A.BLK_CTRT_TP_CD IN('VC','TO')>
       AND   C.TI_CTRT_ID = E.CTRT_ID
       </IF>

     AND   A.VOY_LOG_STS_CD = B.VOY_LOG_STS_CD
     AND   A.VOY_LOG_STS_CD = C.VOY_LOG_STS_CD

 

위 쿼리에 IF문으로 되어 있는 조건인 경우에만 IF문 안의 AND절을 추가로 태우고 싶어요...

저 구문을 어떻게 해야 저 AND절을 실행할지 말지 결정할 수 있을까요...ㅜ.ㅜ

 

by 마농 [2021.07.16 10:42:16]

아래와 같이 AND 와 OR 를 적절히 이용하시면 됩니다.
다만. 가변 적용하려는 조건이 조인 조건인데?
조인 조건을 안타게 한다면? 엉뚱한 결과가 나올 텐데요? (카티션곱)

WHERE ...
  AND (  (a.blk_ctrt_tp_cd IN ('VC', 'TO') AND c.ti_ctrt_id = e.ctrt_id)
      OR (a.blk_ctrt_tp_cd NOT IN ('VC', 'TO'))
      )

 


by DB초보 [2021.07.16 11:27:08]

감사합니다! 마농님이 알려주신대로 하니 조인 탈때는 정상적으로 되고 조인 안타면 말씀해주신대로 중복값이 엄청나오더라구요..

그래서 GROUP BY 사용해서 해결했습니다. 

가이드 감사합니다~!!


by 마농 [2021.07.16 11:48:57]

중복이 나오게 하고 나서
Group By 나 Distinct 로 중복을 제거하는 것은 해결방법이 아닙니다.
중복이 나오지 않도록 하는 것이 맞습니다.
다른 방법을 찾길 권장합니다.

-- 혹시 원하는게 이런게 아닐까 생각되네요.
  AND CASE WHEN a.blk_ctrt_tp_cd IN ('VC', 'TO') THEN c.ti_ctrt_id END = e.ctrt_id(+)

 

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