SQL
SQL_조건부 데이터 변경(MERGE)
S_pot
2021. 5. 31. 15:45
-- 멤버테이블을 정의하고, 데이터 입력
USE sqlDB;
SELECT userID, name, addr INTO memberTBL FROM userTbl;
SELECT * FROM memberTBL;
-- 변경테이블을 정의하고 데이터 입력
CREATE TABLE changeTBL
( changeType NCHAR(4), -- 변경사유
userID char(8),
name nvarchar(10),
addr nchar(2) );
GO
INSERT INTO changeTBL VALUES
('신규가입', 'CHO', '초아', '미국'),
('주소변경', 'LSG', 'null', '제주'),
('주소변경', 'LJB', 'null', '영국'),
('회원탈퇴', 'BBK', 'null', 'null'),
('회원탈퇴', 'SSK', 'null', 'null');
-- MERGE: 사본을 원본 테이블에 삽입하는 것
-- 멤버테이블에 변경테이블 데이터를 적용하는 것
MERGE memberTBL AS M -- 변경될 테이블
USING ChangeTBL AS C -- 변경할 기준이 되는 테이블
ON M.userID = C.userID -- userID를 기준으로 두 테이블을 비교한다.
-- 일치하는 아이디가 없고, '신규가입'이라면 새로운 행을 추가
WHEN NOT MATCHED AND changeType = '신규가입' THEN
-- 추가한다.
INSERT (userID, name, addr) VALUES(C.userID, C.name, C.addr)
-- 일치하는 아이디가 있고, 사유가 '주소변경'이라면 주소변경
WHEN MATCHED AND changeType = '주소변경' THEN
UPDATE SET M.addr = C.addr
-- 일치하는 아이디가 있고, 사유가 '회원탈퇴'라면 해당 행을 삭제
WHEN MATCHED AND changeType = '회원탈퇴' THEN
DELETE;
+
=
MERGE 후 memberTBL