如何使用join语句更新Postgres表?

时间:2013-10-30 15:42:52

标签: database postgresql syntax left-join outer-join

我想做这样的事情:

update t1 set t1.column1 = 'changed'
from left outer join t2 on t1.dataid = t2.dataid
where t2.column2 != 'foo';

基本上,在决定要更新哪些t2记录时,我需要在t1中检查一些内容。我怎样才能使这个语法正确?

2 个答案:

答案 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');