0

我有一个简单的查询,但只有一部分让我感到困惑:

我有以下算法:

merge into table_1 table_2
on table_1.val1 = table_2.val1
when matched and table_1.val2 = table_2.val2
   then merge
when matched and table_1.val2 != table_2.val2
   then delete and insert ( I AM NOT SURE NOW TO DO THIS)
when not matched
   then insert;

你能帮我删除和插入或告诉我一个方法吗?

4

1 回答 1

3

您不能在 WHEN MATCHED THEN UPDATE 子句中插入。您只能在此处删除。如果可以更新,为什么需要删除然后插入?像这样的东西:

merge into table_1 
using table_2 on (table_1.val1 = table_2.val1)
when matched then 
     update set table_1.val3 = 
                case when table_1.val2 = table_2.val2 
                     then table_1.val3 
                else table_2.val3 end
when not matched then insert ...

从下面的评论中,我想你需要这样的东西:

1) 没有引用 table_1 的外键
2) 禁用 table_1 中的主键 val2
3) update table_1 set val2 = null;
4) 运行合并
5) 从 val2 为空的 table_1 中删除;
6) 启用table_1中的主键

于 2014-11-26T17:28:12.893 回答