在 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'
怎么样:
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
);
针对您关于想要使用该minus
子句的评论:
update Table1
set d = 'TEST'
where (a,b,c) in (select a,b,c from Table1 minus select a,b,c from Table2);