2012-03-02 8 views
1

私はH2に、ここで説明したような何かを達成しようとしています:更新値は

Update with inner join?

更新tlegacyのLCAは lca.pr_datoを設定しました=内部TCA CAから
... をca.calc_holdings_date ...

にTDD ddを参加して、私はエラーを取得:H2には見られないコラム "cA.CALC_HOLDINGS_DATEを"。

「欠落している」フィールドは必ず存在します。私は運がない多くの変種を試しました。 H2は、他のいくつかの結合テーブルから収集された1つのテーブルの値を更新するこの方法をサポートしていますか?最終的にこれはIBM DB2上で実行する必要があります。それはそこでサポートされていますか?

+1

...また、私は、DB2(Z-Oが)同じ制限がありますしない限り、私は、このためにH2をドロップしますね、... – Teja

答えて

7

H2には2つのオプションがあります。一つ目は、すべてのデータベースのために動作します:

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

おかげで完全なクエリを記述し、いくつかのサンプル入力と、ご希望の出力を投稿してください? –

+0

DB2(任意のバージョン)には同じ制限があり、 'MERGE'ステートメントもありません。 –

+0

DB2には本当に 'MERGE'文があります。 [z/OS 9.1以降](http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/topic/com.ibm.db2z9.doc.sqlref/src/tpc/db2z_sql_merge.htm)、および[少なくとも9.5以降のLinux/Unix/Windows](http://publib.boulder.ibm.com/infocenter/db2luw/v9r5/topic/com.ibm.db2.luw.sql.ref.doc/doc/r0010873)。 html)(おそらくそれ以前)。しかし、上記と同じ構文ではありません... – bhamby