4

ここH2で説明されているようなことを達成しようとしています:

内部結合で更新しますか?

update tlegacy lca set lca.pr_dato = ca.calc_holdings_date
... from tca ca 内部結合 tdd dd on ...

エラーが表示されます: 列 "CA.CALC_HOLDINGS_DATE" が H2 に見つかりません。

「欠落」フィールドはもちろん存在します。いくつかのバリエーションを試しましたが、うまくいきませんでした。H2 は、他の多くの結合されたテーブルから収集された 1 つのテーブルの値を更新するこの方法をサポートしていますか? 最終的に、これは IBM DB2 で実行されるはずです。そこでサポートされていますか?

4

1 に答える 1

8

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 ...)

2番目のオプションは、非標準の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 ...)
于 2012-03-02T15:44:48.723 に答える