2009-02-19 92 views
2

我试图根据表中的不同列是否位于表b的一组结果中来更新表a中的一列。目前的变化如下:检查SQL CASE语句中是否存在

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

但我会离开,以防有人这个开放可以在该作品上找到一个版本的代码。

回答

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 

问候,
利芬

+0

哇...不必要的更新蝙蝠侠! – 2009-02-19 15:00:12

+0

@Tom。这应该解决它。 – 2009-02-19 15:16:04

0

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

你说:“在表中的不同列是否是一组......”

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

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 
6

我使用DB2 for iSeries框。试试这个:

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

Coalesce()是返回的第一个非空列表中的一个功能。