我想做这样的事情:
update t1 set t1.column1 = 'changed'
from left outer join t2 on t1.dataid = t2.dataid
where t2.column2 != 'foo';
基本上,在决定要更新哪些t2
记录时,我需要在t1
中检查一些内容。我怎样才能使这个语法正确?
答案 0 :(得分:1)
尝试类似:
update t1
set t1.column1 = 'changed'
from t2
where t1.dataid = t2.dataid
and t2.column2 != 'foo';
如果你真的需要外连接尝试类似:
update t1
set t1.column1 = 'changed'
from (select 1 as dummy) dummy_table
left join t2 on t1.dataid = t2.dataid
and t2.column2 != 'foo';
没有经过测试 - 它可能无效。
另一种可能的方法是对t1
的“副本”进行内部联接,然后左键加入t2
答案 1 :(得分:1)
当不必将相关表中的值传输到更新的表时,与WHERE子句中的其他表建立相关性更简单,而不是执行LEFT JOIN。
看起来像这样:
update t1 set t1.column1 = 'changed'
where not exists (select 1 from t2 where t1.dataid = t2.dataid and t2.column2='foo');