当源表中不存在相关行时更新
Posted
技术标签:
【中文标题】当源表中不存在相关行时更新【英文标题】:Update when relevant rows are not present in the source table 【发布时间】:2013-01-10 10:29:25 【问题描述】:我有一个这样的合并语句:
MERGE DESTINATION
USING SOURCE WHERE <Some_Conditions>
WHEN MATCHED AND <Some_Conditions> THEN DELETE
WHEN MATCHED UPDATE
WHEN NOT MATCHED INSERT
这工作正常,但我还有一个条件,即当源中不存在它们的条目时,我必须更新目标中的行。
例如
来源
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
这三个选项。
如何在上面的语句中实现这个功能?
编辑
在下面用我的 cmets 编辑问题:
在上面给出的示例中,它正在运行,然后它正在更新B
并将A
插入到目标表中。但我也想更新D
,即使它不在源表中
【问题讨论】:
@Mahmound 在上面我给出的示例中,它正在运行,然后它正在更新 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
是你所需要的
【讨论】:
完美!一切都在那里:)以上是关于当源表中不存在相关行时更新的主要内容,如果未能解决你的问题,请参考以下文章
Oracle MERGE NOT MATCHED THEN MATCHED THEN UPDATE 可能吗?