我需要一些SQL Server合并声明的帮助。我使用的是2008版本。
我有两个表table1和table2,每个表中有3列:name,age,lastname。
我想从table2到table1做一些Upsert变种。如果表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.唯一意味着名称和姓氏应该相同。
感谢。
答案 0 :(得分:1)
它不是真正的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。
答案 1 :(得分:0)
如果只是插入,你就不会真的合并。仅插入就足够了。但这是一种方法来做到这一点
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
);