表源
Id, Name, Address
1 A #202
1 A #203
1 A #204
2 A #202
目标表
Id, Name, Address
1 A NULL
合并后
Id, Name, Address
1 A #202
2 A #202
我使用这个SQL
create table #S (ID int, Name varchar(25) NULL, Address varchar(25) NULL)
create table #T (ID int, Name varchar(25) NULL, Address varchar(25) NULL)
INSERT #S values(1, 'A', '#202')
INSERT #S values(1, 'A', '#203')
INSERT #S values(1, 'A', '#203')
INSERT #S values(1, 'A', '#204')
INSERT #T values(1, 'A', NULL)
MERGE #T USING
(
Select id, name, address
from #S
) AS S(id,name,address)
on #T.id=S.id and #T.Name=S.Name
when not matched THEN
INSERT values(S.id,S.Name, S.Address)
when matched then
update set Address = S.Address;
GO
Select * from #T
GO
Select * from #S
GO
这将导致一个错误
消息8672,级别16,状态1,行18
MERGE语句试图更新或删除同一行多次。 这发生在一个目标行匹配多个源行。 MERGE语句不能更新/删除目标表多次的同一行。 细化ON子句,以确保目标行至多有一个源行匹配时,或使用GROUP BY子句组源行。
我想从任何三个匹配值的更新地址值一列。 这该怎么做?