我有一个目标表,其中包含UserId、ItemId和SomeData。我有一个源表,我想用它来根据缺少的ItemId更新目标。
也许在一个例子中更容易解释...
这是目标和现有数据:
UserId ItemId SomeData
1 1 x
2 2 y
2 3 z
我还有另一个临时的源表,它保存了特定用户的一些ItemId。如果UserId已经具有该ItemId,则忽略该have。如果不存在,则添加它。
UserId ItemId SomeData
1 1 x <--- this ItemId already exist for UserId=1, ignore
1 2 a <--- the next two ItemId don't exist for UserId=1, add them
1 3 b
我期望的结果集是这样的:
UserId ItemId SomeData
1 1 x
2 2 y
2 3 z
1 2 a <--- added
1 3 b <--- added
我正在努力寻找在merge命令中连接表的正确方法,以便能够为用户插入缺失的ItemId记录。
MERGE Target T
USING Source S
ON T.UserId = S.UserId --This doesn't get the right matches but neither does joining it by ItemId
WHEN NOT MATCHED
THEN
INSERT bah bah bah
我该怎么做呢?
发布于 2016-07-21 05:19:00
MERGE INTO @tb AS T
USING @tmpTb AS S
ON T.userId = S.userId AND T.itemId = S.itemId
WHEN NOT MATCHED THEN
INSERT (userId, itemId, someData)
VALUES (S.userId, S.itemId , S.someData);
这里@tb是目标表,@tmpTb是源表。
发布于 2016-07-21 04:20:21
只需将ItemId
添加到条件中
MERGE Target T
USING Source S
ON (T.UserId = S.UserId AND T.ItemId = S.ItemId)
WHEN NOT MATCHED
THEN
INSERT bah bah bah
发布于 2016-07-21 04:29:54
这将有助于you...By使用UNION,您可以合并没有任何重复的两个表,使用UNION的情况下,所有的重复也将存在。
insert into Result_Table
select UserId,ItemId,SomeData from table_one
union
select UserId,ItemId,SomeData from table_two
https://stackoverflow.com/questions/38494745
复制