2012-03-02 46 views
1

我想实现的东西像H2这里描述:更新值

Update with inner join?

更新tlegacy LCA 设置 lca.pr_dato = ca.calc_holdings_date
... 从TCA CA内部联接上TDD DD ...

,我得到错误:列 “CA.CALC_HOLDINGS_DATE” 不H2找到。

“失踪”字段正在呈现。我尝试了许多变种,但没有运气。 H2是否支持这种更新从其他许多连接表中收集的表中的值的方式?最终,这应该在IBM DB2上运行。它支持那里吗?

+1

请邮寄一些样品输入所需的输出。还写了完整的查询... – Teja 2012-03-02 15:39:07

回答

7

对于H2有两个选项。第一个适用于所有数据库:

update tlegacy lca set 
    lca.pr_dato = (select ca.calc_holdings_date ... from tca ca where ...) 
    where lca.id in (select ca.id from tca where ...) 

第二种选择是使用非标准MERGE语句。如果没有存在该键的行,它将插入新行。

merge into tlegacy(pr_dato) key(id) 
    select ca.calc_holdings_date, ca.id from tca ca where ... 
    and exists (select * from tlegacy where ...) 
+0

谢谢,我想我就放下H2这一点,除非DB2(Z-OS)具有相同的限制? – 2012-03-02 16:43:51

+0

DB2(任何版本)具有相同的限制,也没有'MERGE'语句。 – 2012-03-02 16:58:17

+0

DB2确实具有'MERGE'语句。它位于[自9.1开始的z/OS]上(http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/topic/com.ibm.db2z9.doc.sqlref/src/tpc/db2z_sql_merge.htm),以及[Linux/Unix/Windows至少9.5](http://publib.boulder.ibm.com/infocenter/db2luw/v9r5/topic/com.ibm.db2.luw.sql.ref.doc/doc/r0010873。 HTML)(可能更早)。它与上面的语法不一样,虽然... – bhamby 2012-03-02 17:55:41