MySQL duplicate 에 대해 질문 드리겠습니다. 0 5 2,494

by 쏘쓰 [MySQL] MySQL query duplicate merge [2019.09.19 16:36:19]


안녕하세요. 질문 하나 드리겠습니다.

oracle을 사용하다 MySQL 로 변환 중입니다.

 

merge into table1 t1 
using dual on col_id = 'id'
when matched then
    update set col_name = 'name'
when not matched then
    insert into (col_id, col_name)
    values ('id', 'name');

 

위와 같이 merge문에서 테이블과 dual 테이블을 사용하는 쿼리는 

MySQL 에서 insert into table1 ... on duplicate key update ...;

형식으로 변환하여 잘 작동하는 것으로 확인 했지만 

dual 테이블 자리에 subquery 로 다중테이블을 사용할 경우

duplicate 로 대응 할 수 있는 방법이 없는지 궁금합니다.

 

항상 많은 도움 받고있습니다.

조언 부탁 드립니다. 감사합니다.

 

by 마농 [2019.09.19 17:01:23]
INSERT INTO t1(col_id, col_name)
SELECT col_id   col_id_new
     , col_name col_name_new
  FROM t2
ON DUPLICATE KEY UPDATE col_name = col_name_new
;

 


by 쏘쓰 [2019.09.20 10:52:57]

마농님 항상 도움주셔서 감사합니다.
하지만, 제가 질문드린내용은 

merge into table1 t1 
using (
  select col_id, col_time from table2
) t2 on t1.col_id = t2.col_id'
when matched then
    update set col_name = 'name'
when not matched then
    insert into (col_id, col_name)
    values ('id', 'name');


이런식으로 dual 위치에 subquery가 들어 가는 쿼리를 duplicate로 변환이 가능한지를

질문 드린 것 이었습니다. 제가 착오가 있게끔 질문을 잘 못 작성한거 같네요.


by 마농 [2019.09.20 11:11:53]

질문을 잘못하신것 같지는 않고.
제 답변을 잘못 이해하고 있는게 아닌지?
질문에 대한 답변이 맞는 듯 합니다.


by 쏘쓰 [2019.09.20 12:29:26]

t1 과 t2를 ',' 나 join, using 과 같은 예약어가 없이 달아서 쓰면 되는것으로 이해 하면 될까요 ?

여하튼 감사합니다. 답변주신내용 참고하여 시도해보도록 하겠습니다. 감사합니다.


by 마농 [2019.09.20 15:47:45]

col_id 가 테이블의 PK 로 잡혀 있어야만 합니다.

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