2014-04-22 51 views
0

我有以下查詢。我想要完成的是使用ccc.p_s_a的c_id字段更新表ssa.psa_xtn的c_id字段,其中兩個表的a_id都匹配。如何在db2中創建查詢範圍內的表別名?

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

是否DB2支持這句法:從表1表1更新設置字段= table2.field加入表2等? –

+0

不幸的是,這並沒有讓我非常生氣。 – Serge

回答

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

+0

原始SQL的問題是子查詢是_not_相關的。 – mustaccio

+0

哈哈!不知道我的大腦在那裏。編輯我的答案只是封裝'MERGE'。 –

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 
    )