我有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
答案 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
是保留字,不应该用作标识符)