0

在 Oracle 10g 中,我想更新下面产生的减号查询的记录:

(
 SELECT A,B,C FROM Table1

  MINUS

 SELECT A,B,C FROM Table2
)

要更新的列不是减号查询的一部分,因为它在两个表中都不存在,因此下面的代码不是一个选项

UPDATE
(
 SELECT A,B,C FROM Table1

  MINUS

 SELECT A,B,C FROM Table2
)
SET TABLE1.D = 'TEST'
4

2 回答 2

1

怎么样:

update table1
   set d = 'TEST'
 where (a,b,c) not in(select a,b,c from table2);

编辑:由于排序操作,减号的性能通常很糟糕。如果其中任何一个{a,b,c}可以为空,请尝试以下操作:

update table1 t1
   set t1.d = 'TEST'
 where not exists(
         select 'x'
           from table2 t2
          where t2.a = t1.a
            and t2.b = t1.b
            and t2.c = t1.c
       );
于 2013-05-14T19:01:40.940 回答
1

针对您关于想要使用该minus子句的评论:

update Table1
  set d = 'TEST'
  where (a,b,c) in (select a,b,c from Table1 minus select a,b,c from Table2);
于 2013-05-14T20:44:26.663 回答