2016-07-21 3 views
0

У меня есть целевая таблица с идентификаторами UserId, ItemId и SomeData. У меня есть исходная таблица, которую я хочу использовать для обновления цели на основе отсутствующего ItemId.Как скомпилировать SQL, когда мне нужно совместить два столбца

Может быть проще объяснено в примере ...

Это цель и существующий данные:

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 

Я изо всех сил с надлежащим образом присоединиться к таблице в команде слияния, так что я могу вставить недостающие 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 

Как я могу это сделать?

+2

Если вы заботитесь о 'Userid' и' Itemid', просто добавьте их в раздел 'ON':' T.UserId = S.UserId AND T.ItemID = S.ItemID' –

ответ

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 является источником таблицы.

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 
0

Это поможет вам ... С помощью UNION можно объединить две таблицы без каких-либо дубликатов .При использования UNION ALL дубликаты также будет существовать.

insert into Result_Table 
    select UserId,ItemId,SomeData from table_one 
    union 
    select UserId,ItemId,SomeData from table_two 
Смежные вопросы