안녕하세요 현재 oracle에서 mysql 전환에 있어
oracle merge into을 변환하려는 와중에 혼자 해결하기 어려워 여쭤봅니다.
MERGE INTO USER T USING (SELECT USER_ID, EMPNO, ADDR FROM AAA ) S ON (T.USER_ID = S.USER_ID) WHEN MATCHED THEN UPDATE SET T.EMPNO= S.EMPNO, T.ADDR = S.ADDR, WHEN NOT MATCHED THEN INSERT (USER_ID, EMPNO, ADDR, ) VALUES (S.USER_ID, S.EMPNO, S.ADDR, )
이 구문을 mysql 전환하고 싶습니다.
INSERT INTO USER T(USER_ID, EMPNO, ADDR, ) SELECT (S.USER_ID, S.EMPNO, S.ADDR, ) FROM (SELECT USER_ID, EMPNO, ADDR FROM AAA ) S ON DUPLICATE KEY /*(WHERE ?)*/ UPDATE T.EMPNO= S.EMPNO, T.ADDR = S.ADDR
이구조에 맞추려고 하니 USING 부분을 SELECT FROM 으로 써야될 거 같은데
그러면 ON DUPLICATE 를 못쓰는거 같아서 어려운거같습니다.
merge into 뒤에 있는 on 구문을 mysql 구문 어디에 붙여서 사용해야되는지
구글링해도 정확한 정보를 알 수 없어서 질문드립니다.
감사합니다
INSERT INTO user(user_id, empno, addr)
SELECT user_id
, empno new_empno
, addr new_addr
FROM aaa
ON DUPLICATE KEY
UPDATE empno = new_empno
, addr = new_addr
;
혹시 oracle 구문에 있는 on 부분은 msyql select 절 안에서
참조해서 안써도 되는거 맞을까요?
정확한 정보가 없어서 헤맸는데 답변감사드립니다. !!
입력 대상 테이블의 PK 항목이 user_id 라는 가정 하에 동작하는 쿼리입니다.
머지문처럼 ON 절을 자유롭게 기술할 수 있는게 아니라
PK 를 기준으로 동작한다고 보시면 됩니다.
아하 이해했습니다 감사합니다