我有以下查询。我想要完成的是使用ccc.p_s_a的c_id字段更新表ssa.psa_xtn的c_id字段,其中两个表的a_id都匹配。
update ssa.psa_xtn xtn
set xtn.c_id =
(
select psa.c_id
from ccc.p_s_a psa
inner join ssa.psa_xtn xtn
on psa.a_id = xtn.a_id
)
where psa.a_id = xtn.a_id;
我收到的错误表明psa.a_id在使用的上下文中无效(最后一行)。我知道这是因为psa是在子查询中定义的。如何为整个查询定义它,甚至在主查询中再次定义它以使该查询有效?
答案 0 :(得分:1)
您需要一个相关的子选择,如@IanBjorhovde所述:
update ssa.psa_xtn xtn
set xtn.c_id =
(
select psa.c_id
from ccc.p_s_a psa
where psa.a_id = xtn.a_id
)
答案 1 :(得分:0)
您可能需要考虑查看MERGE
声明:
MERGE INTO ssa.psa_xtn xtn
using ccc.p_s_a psa
on (xtn.a_id = psa.a_id)
when matched then update set xtn.c_id = psa.c_id;
它提供了相关子选择的更多灵活性,并且还提供了执行upserts的能力(更新其他插入)。