Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查SQL CASE语句中是否存在_Sql_Database_Db2 - Fatal编程技术网

检查SQL CASE语句中是否存在

检查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

我试图根据表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 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;如果你提到那件事,我会接受的@快到午餐时间了。你想让我说什么?你自己已经找到了解决办法。你可以回答自己的问题并接受吗?谢谢你的建议。