仅在ORACLE中使用MERGE删除

时间:2018-10-05 11:27:59

标签: sql oracle merge

我想从TARGET_TABLE中删除记录,这些记录在SOURCE_TABLE中没有对应的记录。在Postgres中,以下内容显然适用,而在Oracle中则不行:

MERGE INTO TARGET_TABLE tar
     USING (select s.empno from SOURCE_TABLE s
            left outer join TARGET_TABLE t
            on s.empno=t.empno
            where t.empno is null) src ON (tar.empno = src.empno)
WHEN NOT MATCHED THEN DELETE

在Oracle中使用MERGE时是否可以执行DELETE作为唯一动作?

1 个答案:

答案 0 :(得分:0)

根据oracle文档,您不能这样做

Docs

  • 指定DELETE where_clause来清理表中的数据,同时 填充或更新它。受此子句影响的唯一行是 目标表中由合并更新的那些行 操作。 DELETE WHERE条件评估更新后的值, 不是由UPDATE SET ... WHERE评估的原始值 条件。如果目标表的行符合DELETE 条件,但不包含在ON子句定义的连接中, 那么它不会被删除。在目标上定义的任何删除触发器 删除行将激活表格。

但是您可以使用虚拟更新

queryset = Product.objects.filter(category=2)
for i in queryset:
    for j in Windows_system_apps:
        if i.name in j:
            i.app_type = 1
            i.save()

pattern = ["alpha123", "delta1", ... ]