如何在db2中创建查询范围的表别名?

时间:2014-04-22 14:41:57

标签: sql db2

我有以下查询。我想要完成的是使用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是在子查询中定义的。如何为整个查询定义它,甚至在主查询中再次定义它以使该查询有效?

2 个答案:

答案 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的能力(更新其他插入)。