mysql on duplicate on 관련 질문드립니다. 0 4 1,155

by 초보개발자 [MySQL] [2022.07.27 15:37:28]


안녕하세요 현재 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 구문 어디에 붙여서 사용해야되는지 

구글링해도 정확한 정보를 알 수 없어서 질문드립니다.

감사합니다

 

 

by 마농 [2022.08.01 10:09:23]
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
;

 


by 초보개발자 [2022.08.02 09:14:21]

혹시 oracle 구문에 있는 on 부분은 msyql select 절 안에서 

참조해서 안써도 되는거 맞을까요?

정확한 정보가 없어서 헤맸는데 답변감사드립니다. !! 


by 마농 [2022.08.02 09:26:30]

입력 대상 테이블의 PK 항목이 user_id 라는 가정 하에 동작하는 쿼리입니다.
머지문처럼 ON 절을 자유롭게 기술할 수 있는게 아니라
PK 를 기준으로 동작한다고 보시면 됩니다.


by 초보개발자 [2022.08.02 11:17:55]

아하 이해했습니다 감사합니다

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