我有一个具有UserId,ItemId和SomeData的目标表。我有一个源表,我想根据缺少的ItemId来更新目标。
在示例中可能更容易解释......
这是目标和现有数据:
UserId ItemId SomeData
1 1 x
2 2 y
2 3 z
我有另一个临时源表,其中包含特定用户的一些ItemId。如果UserId已经有ItemId,请忽略。如果不存在,请添加它。
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
我该怎么做?
答案 0 :(得分:1)
只需将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
答案 1 :(得分:1)
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是源表。
答案 2 :(得分:0)
这将有助于您...通过使用UNION,您可以合并两个表而不会有任何重复。如果使用UNION,所有重复项也将存在。
insert into Result_Table
select UserId,ItemId,SomeData from table_one
union
select UserId,ItemId,SomeData from table_two