首页 > 解决方案 > 使用案例结果的 SQL 更新

问题描述

我需要使用匹配键的另一个 file2 中的字段内容更新 file1 中的值,但前提是在 file2 中找到匹配的行。否则,使用 'Q' 文字更新 file1 字段。这可行,但似乎是多余的,并且需要太长时间?建议?

update ZXU                                                 
set XUATTN =  case when (select count(*) from ZXK       
                         where XKUSER = 'TOMTEST') > 0 
                  then (select XKAUTH from ZXK         
                         where XKUSER = 'TOMTEST')     
                  else 'Q'                             
             end                                       
where XUUSER='TOMTEST'                                     

标签: sqlcase

解决方案


您可以使用COALESCE()

update ZXU
    set XUATTN = COALESCE( (select k.XKAUTH from ZXK k where k.XKUSER = ZHU.XUUSER), 'Q')
    where XUUSER = 'TOMTEST';

我会注意到,如果子查询返回多行,这(和您的代码)将生成错误。


推荐阅读