case문 질문 있습니다! 0 2 539

by 천만달러 [Tibero] [2021.09.03 14:57:06]


<update id="saveGroupCompany" parameterType="hashmap">
        MERGE INTO HMG.TB_FOOTER_GROUP A 
        USING(
        <foreach collection="list" item="item" index="index" separator="UNION" >
            SELECT
                #{item.groupId, jdbcType=NUMERIC} as groupId
                , #{item.langCd} as langCd
                , #{item.groupNm} as groupNm
                , #{item.groupLink} as groupLink
                , #{item.sortNo} as sortNo
                , #{__param.userId} as userId
            FROM DUAL
        </foreach>
        ) B
        ON (A.GROUP_ID = B.groupId)
        WHEN MATCHED THEN
            UPDATE SET
                A.LANG_CD       = B.langCd
                , A.GROUP_NM    = B.groupNm
                , A.GROUP_LINK  = B.groupLink
                , A.SORT_NO     = B.sortNo
                , A.UPDATE_USER = 
                    CASE WHEN A.LANG_CD    = B.langCd 
                         AND  A.GROUP_NM   = B.groupNm
                         AND  A.GROUP_LINK = B.groupLink
                         AND  A.SORT_NO    = B.sortNo
                         THEN A.UPDATE_USER
                         ELSE B.userId
                    END
                , A.UPDATE_DATE = 
                    CASE WHEN A.LANG_CD    = B.langCd
                         AND  A.GROUP_NM   = B.groupNm
                         AND  A.GROUP_LINK = B.groupLink
                         AND  A.SORT_NO    = B.sortNo
                         THEN A.UPDATE_DATE
                         ELSE CURRENT_TIMESTAMP
                    END
        WHEN NOT MATCHED THEN
        INSERT (
            A.GROUP_ID
            , A.LANG_CD
            , A.GROUP_NM
            , A.GROUP_LINK
            , A.SORT_NO
            , A.CREATE_USER
            , A.CREATE_DATE
            , A.UPDATE_USER
            , A.UPDATE_DATE
        ) VALUES (
            HMG.SEQ_FOOTER_GROUP.NEXTVAL
            , B.langCd
            , B.groupNm
            , B.groupLink
            , B.sortNo
            , B.userId
            , CURRENT_TIMESTAMP
            , B.userId
            , CURRENT_TIMESTAMP
        )
    </update>

 

위 쿼리에서 중간 부분

 

WHEN MATCHED THEN
            UPDATE SET
                A.LANG_CD       = B.langCd
                , A.GROUP_NM    = B.groupNm
                , A.GROUP_LINK  = B.groupLink
                , A.SORT_NO     = B.sortNo
                , A.UPDATE_USER = 
                    CASE WHEN A.LANG_CD    = B.langCd 
                         AND  A.GROUP_NM   = B.groupNm
                         AND  A.GROUP_LINK = B.groupLink
                         AND  A.SORT_NO    = B.sortNo
                         THEN A.UPDATE_USER
                         ELSE B.userId
                    END
                , A.UPDATE_DATE = 
                    CASE WHEN A.LANG_CD    = B.langCd
                         AND  A.GROUP_NM   = B.groupNm
                         AND  A.GROUP_LINK = B.groupLink
                         AND  A.SORT_NO    = B.sortNo
                         THEN A.UPDATE_DATE
                         ELSE CURRENT_TIMESTAMP
                    END
        WHEN NOT MATCHED THEN

 

여기 부분 중간 CASE문에 AND이렇게 여러번 달아도 되나요?

뭔가 안되는거 같은...그런 느낌인데...잘 모르겠어서 질문드립니다!

안되는거라면 보통 어떻게 해야 할지...도와주세요~!

by 마농 [2021.09.03 16:01:33]

조건절입니다. 단순 조건만 되는게 아니라 복합 조건 올 수 있습니다.
그런데. 제가 지난 질문에 댓글로 WHERE 절 사용법 알려 드렸는데
왜 WHERE 절 사용 안하고 굳이 CASE 하시나요?


by 천만달러 [2021.09.03 16:48:58]

그게 안되가지고...케이스문으로 바꿨는데 이것도 안되서

혹시 코드가 잘못됐나 싶었는데 제가볼땐 쿼리쪽이 아니라 다른곳에 문제가 있는 거 같네요...;;

여튼 답변 감사합니다!

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