Обновление, когда соответствующие строки отсутствуют в исходной таблице

У меня есть заявление слияния, как это:

MERGE DESTINATION
USING SOURCE WHERE <Some_Conditions>
WHEN MATCHED AND <Some_Conditions> THEN DELETE
WHEN MATCHED UPDATE
WHEN NOT MATCHED INSERT 

Это работает нормально, но у меня есть еще одно условие, т.е. я должен обновить строки в месте назначения, когда их запись отсутствует в источнике.

Ex.

Источник

Column1 Column2 Column3
-----------------------
A        A       A
B        B       B

Место назначения

Column1 Column2 Column3
-----------------------------------
B        B       <Some_Calculation>
D        D       <Some_Calculation>

Теперь, поскольку в источнике нет строк D Я должен изменить Column 3 в пункте назначения с некоторым расчетом. Но поскольку слияние дает только три варианта delete, update а также insert когда строки совпадают или нет.

Как я могу реализовать эту функциональность в приведенном выше заявлении?

редактировать

Редактирование вопроса с моими комментариями ниже:

В приведенном выше примере, который я привел выше, выполняется, то это обновление B и вставка A в таблицу назначения. Но я хочу обновить D также даже когда его нет в исходной таблице

1 ответ

Решение

Может быть, прочитайте документацию для MERGE:

MERGE 
[ TOP ( expression ) [ PERCENT ] ] 
[ INTO ] <target_table> [ WITH ( <merge_hint> ) ] [ [ AS ] table_alias ]
USING <table_source> 
ON <merge_search_condition>
[ WHEN MATCHED [ AND <clause_search_condition> ]
    THEN <merge_matched> ] [ ...n ]
[ WHEN NOT MATCHED [ BY TARGET ] [ AND <clause_search_condition> ]
    THEN <merge_not_matched> ]
[ WHEN NOT MATCHED BY SOURCE [ AND <clause_search_condition> ]
    THEN <merge_matched> ] [ ...n ]
...

WHEN NOT MATCHED BY SOURCE это то, что вам нужно

Другие вопросы по тегам