检查SQL CASE语句中是否存在
我试图根据表a中的另一列是否在表b的一组结果中来更新表a中的一列。目前关于:检查SQL CASE语句中是否存在,sql,database,db2,Sql,Database,Db2,我试图根据表a中的另一列是否在表b的一组结果中来更新表a中的一列。目前关于: 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
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);
但是我会把这个打开,以防有人能在顶部找到一个有效的代码版本。这在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
问候,,
Lieven第一次出现的a.field1应该是a.field2 你说表中的另一列是否在一个集合中
您的代码正在修改同一列,而不是另一列。我不是SQL或DB2方面的专家,但也许您可以将这两个表连接起来,检查b.field1是否为null
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
我在一个DB2foriSeries盒子上工作。试试这个:
update a
set a.field1 =
Coalesce( ( select 'FOO'
from b
where b.field2 = a.field2 ),
'BAR' )
Coalesce是一个返回列表中第一个非空值的函数 您可能希望使用一个左外连接,而不是一个完整的外连接。您仍然可以将它放在一个update语句中,并使用CASE语句检查表B的PK中的空值,但分两步执行也有好处,而且您现在所做的可以消除重复的更新。@Tom。我的直觉告诉我,两次更新可能比在一次更新中使用一个case更快。语法在DB2中似乎不起作用,但您是正确的,在两次单独运行中这样做的精神更清晰。有效的语法ie DB2不喜欢更新联接是更新集合field1='FOO',其中field2在select field2 from b中;更新集合字段1='BAR',其中字段2不在b中选择字段2;如果你提到那件事,我会接受的@快到午餐时间了。你想让我说什么?你自己已经找到了解决办法。你可以回答自己的问题并接受吗?谢谢你的建议。