코딩안해
72
2017-10-12 21:02:07.0
2
133

database "merge"쿼리문을 제대로 작성했는지,틀렸다면 어떻게 작성해야 하는지 봐주세요!


게시판 좋아요 관련 쿼리문 작성 중 merge라는 함수를 쓰게 됐습니다.
그런데 mybatis 에서는 merge를 사용하지 못한다고 해서 결국 못쓰게 됐는데
mysql에서는 merge를 쓸 수 있는지 궁금합니다
또, 쿼리문 작성 한 것이 제대로 쓴 것이 맞는지, 어디가 틀렸는지 알려주세요
insert 를 사용해서 값을 넣으면 이미 값이 있는 상태에서는 값이 바뀌나요?
아니면 오류가 나나요?
제가 하려는 것은 좋아요를 누른 모든 회원의 회원코드(mem_id)를 hw_like의 mem_id에
넣어서 그 값을 리스트로 받아오고 싶은데 어떻게 해야할 지 모르겠습니당..
param1과 param2는 controller에서 받아온 share_id와 mem_id입니다.



//HW_LIKE TABLE에서 추가수정을 할거다 SHARE_BOARD를 이용해서
//조건은 HW_LIKE의 SHARE_ID가 #{PARAM1}이고 SHARE_ID가 테이블에 없을것.
//SHARE_ID가 있는 열이 없으면 데이터를 추가 할거고 
//SHARE_ID가 있는 열이 있으면 MEM_ID에 값을 추가할것

<merge id="increase_ShareLike">
        MERGE INTO HW_LIKE L USING SHARR_BOARD S
        ON ( L.SHARE_ID = #{param1} AND L.SHARE_ID IS NULL  ) 
        WHEN MATCHED THEN INSERT INTO (LIKE_ID,SHARE_ID,MEM_ID) 
                VALUES ( S.SHARE_LIKE+1, #{param1}, #{param2}) 
        WHEN NOT MATCHED THEN INSERT INTO L.MEM_ID VALUES #{param2} 
  </merge>








0
0
  • 답변 2

  • zepinos
    13k
    2017-10-13 00:39:22.0

    쿼리는 조건이 이상하고(널이면서 값이 있단게 말이 안되죠), MaBatis 에 merge 가 안된다는게 아니고 <merge> 라는 태그가 없는 겁니다. <update> 태그를 쓰면 됩니다. mysql 은 merge 대신 insert or update 을 해주는 다른 문법이 있지만 위와 같이 조건에 따라 업데이트 하는건 없는 걸로 알고, 그냥 두 번 쿼리 실행하면 됩니다.


    그것보다 MyBatis 와 rdbms 을 구분 못하는게 아닌가 싶은데...

    0
  • speed1139
    575
    2017-10-13 08:19:05.0

    zepinos 님 말씀 처럼 쿼리 검색 조건도 이상하고 Merge 문법도 이상하고 

    <merge> 태그는 ibatis에도 아마 없을겁니다. 있을수도 있지만 제기억엔 써본적은 없어요

    MERGE INTO 타겟테이블 TT USING 소스테이블 ST 

    ON (TT.필드1=ST.필드1 AND TT.필드2=ST.필드2 ....)

    WHEN MATCHED THEN -- 존재하면 UPDATE

    UPDATE

    SET TT.타겟_필드1=ST.소스_필드1 ,TT.타겟_필드2=ST.소스_필드2 

    WHEN NOT MATCHED THEN -- 없으면 INSERT

    INSERT (타겟_필드1, 타겟_필드2, 타겟_필드3....) VALUES( ST.소스_필드1 , ST.소스_필드2 , ST.소스_필드3 . . );


    제가 아는 merge문의 문법은 이것인데.. 

    왜 값이 존재 할때도 INSERT를 하시고 존재하지 않으실때도 INSERT를 하시는지도 의문이고요


    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.