2

aテーブル内の別の列が table からの一連の結果に含まれているかどうかに基づいて、テーブル内の列を更新しようとしていますb。現在のバリエーション:

update a
set a.field1 =
 case
 when exists (
   select b.field2
   from b
   where b.field2 = a.field2
 )
 then 'FOO'
 else 'BAR'
 end

実行されていません。DB2データベースでこれを行う方法はありますか?

編集:あなたの答えをありがとう、私ができる最善のことは

update a set field1 = 'FOO' where field2 in (select field2 from b);

update a set field1 = 'BAR' where field2 not in (select field2 from b);

しかし、誰かが動作するコードの上部のバージョンを見つけることができる場合に備えて、これを開いたままにします.

4

4 に答える 4

6

DB2 for iSeries ボックスで作業しています。これを試して:

update a
set a.field1 =
 Coalesce( ( select 'FOO'
             from b
             where b.field2 = a.field2 ),
                      'BAR' )

Coalesce()リスト内の最初の非 NULL を返す関数です。

于 2009-02-25T19:06:27.857 に答える
3

これは SQLServer で機能します。おそらく DB2 も同様の構造を持っています。

update a SET field1 = 'BAR'
from a
     left outer join b on b.field1 = a.field1
where b.field1 is null;
update a SET field1 = 'FOO'
from a
     inner join b on b.field1 = a.field1

よろしく、
リーベン

于 2009-02-19T12:14:16.583 に答える