2

我正在尝试根据 tablea中的不同列是否在 table 的一组结果中来更新 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 回答
0

a.field1 的第一次出现应该是 a.field2。

您说“表中的不同列是否在集合中......”

您的代码正在修改同一列,而不是不同的列。

于 2009-02-19T12:16:34.923 回答
0

我不是 SQL 或 DB2 方面的专家,但也许您可以加入这两个表并检查 b.field1 是否为空?

update a
set a.field1 = case when b.field1 is not null then 'FOO' else 'BAR' end
from a full outer join b on a.field1 = b.field1
于 2009-02-19T12:16:45.860 回答