Page 141 - SQL
P. 141
Chapter 38: MERGE
Introduction
MERGE (often also called UPSERT for "update or insert") allows to insert new rows or, if a row
already exists, to update the existing row. The point is to perform the whole set of operations
atomically (to guarantee that the data remain consistent), and to prevent communication overhead
for multiple SQL statements in a client/server system.
Examples
MERGE to make Target match Source
MERGE INTO targetTable t
USING sourceTable s
ON t.PKID = s.PKID
WHEN MATCHED AND NOT EXISTS (
SELECT s.ColumnA, s.ColumnB, s.ColumnC
INTERSECT
SELECT t.ColumnA, t.ColumnB, s.ColumnC
)
THEN UPDATE SET
t.ColumnA = s.ColumnA
,t.ColumnB = s.ColumnB
,t.ColumnC = s.ColumnC
WHEN NOT MATCHED BY TARGET
THEN INSERT (PKID, ColumnA, ColumnB, ColumnC)
VALUES (s.PKID, s.ColumnA, s.ColumnB, s.ColumnC)
WHEN NOT MATCHED BY SOURCE
THEN DELETE
;
Note: The AND NOT EXISTS portion prevents updating records that haven't changed. Using the
INTERSECT construct allows nullable columns to be compared without special handling.
MySQL: counting users by name
Suppose we want to know how many users have the same name. Let us create table users as
follows:
create table users(
id int primary key auto_increment,
name varchar(8),
count int,
unique key name(name)
);
Now, we just discovered a new user named Joe and would like to take him into account. To
achieve that, we need to determine whether there is an existing row with his name, and if so,
https://riptutorial.com/ 123

