根据另一个表中的值更新2列

时间:2016-09-02 15:05:11

标签: sql postgresql

我有2张桌子,我想写2次更新 带有id,flag(null)和count(null)列的tbl_stage 带有id,count,更新列的tbl_source。

更新前

tbl_stage                 tbl_source
id    flag    count       id    count    updated
abc   NULL    NULL        abc   9.0      false
                          def   3.6      false

我想更新tbl_stage.count = tbl_source.count和tbl_stage.flag = true,其中tbl_stage.id = tbl_source.id。
另外,tbl_source.updated = true,其中tbl_stage.id = tbl_source.id。

更新后应该如下所示。

tbl_stage                 tbl_source
id    flag    count       id    count    updated
abc   true    9.0         abc   9.0      true
                          def   3.6      false

2 个答案:

答案 0 :(得分:0)

您需要使用2个UPDATE语句,因为在一个语句中更新2个表是不可用的。

update tbl_stage
set [count]=tbl_source.count 
    ,flag = 1
FROM tbl_source WHERE tbl_stage.id=tbl_source.id

update tbl_source
set updated = 1
from tbl_source WHERE tbl_stage.id=tbl_source.id
and tbl_stage.count=tbl_source.count

答案 1 :(得分:0)

您可以使用单个语句执行此操作,一次更改两个表:

with stage_update as (
  update stage
     set cnt = s.cnt, 
        flag = true
  from source s
  where stage.id = s.id
  returning s.id
)
update source
  set updated = true
where id in (select id from stage_update);

(我选择cnt作为列名,因为count是保留字,不应该用作标识符)