我需要一些关于SQL Server合并语句的帮助。我使用的是2008版。
我有两个表table1和table2,每个表中有3列:name、age、lastname。
我想把Upsert从表2变成表1。如果表1中存在记录,请忽略。如果不存在,则插入。
我知道下面会起作用-
merge into [test].[dbo].[table1] a
using [test].[dbo].[table2] b
on a.name = b.name and a.lastname = b.lastname
when not matched then
insert (name, age, lastname) values (b.name, b.age, b.lastname)
我想知道我能不能做这样的事?目前以下不起作用:
merge into [test].[dbo].[table1] a
using [test].[dbo].[table2] b
on a.name = b.name and a.lastname = b.lastname
when not matched then
insert (select name, max(age), lastname from b group by name, lastname)
基本上,我只想将表2中的"唯一记录"插入到表1中。Unique表示名称和姓氏应该相同。
谢谢。
这不是一个真正的UPSERT操作,而是一个简单的插入,我会做这样的事情。。。。
insert into [test].[dbo].[table1](name, age, lastname)
SELECT b.name, MAX(b.age) Age, b.lastname
FROM [test].[dbo].[table2] b
WHERE NOT EXISTS (SELECT 1
FROM [test].[dbo].[table1]
WHERE name = b.name
and lastname = b.lastname)
GROUP BY b.name, b.lastname
如果您更新了记录(如果它们已经存在),则UPSERT将是有效的
对于插入,您并没有真正合并。仅插入一个就足够了。但有一种方法可以做到
merge into [test].[dbo].[table1] a
using (
select
name,
lastname,
max(age) age
from [test].[dbo].[table2]
group by
name,
lastname
) b on
a.name = b.name and
a.lastname = b.lastname
when not matched
then
insert (
name,
lastname,
age
)
VALUES (
b.name,
b.lastname,
b.age
);