首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >转换查询为使用EXISTS

转换查询为使用EXISTS
EN

Stack Overflow用户
提问于 2016-03-18 19:15:22
回答 3查看 44关注 0票数 0

我写了一个查询来查找一些记录...

代码语言:javascript
复制
select account_num, mob_tele_feat_uid, mob_tele_feat, done
from LOAD_MOBILE_DATA lmd1
where (mob_tele_feat is null and mob_tele_feat_uid is not null)
   or (mob_tele_feat is not null and mob_tele_feat_uid is null);

表中数据--

代码语言:javascript
复制
4579214598412   223344  {sw_dcf=Gold}|{sw_dcf_active_voice_bsg=Silver}|{sw_cfb=bronze}|{sw_c=bronze}    S
4579214598412   223344                                                                                  S
     null       null    null                                                                            P

第一个查询的输出是

代码语言:javascript
复制
4579214598412   223344  null    S

我想在update语句中使用exists,如下所示

代码语言:javascript
复制
update load_mobile_data lmd
  set done = 'P'
where exists
  (select account_num, mob_tele_feat_uid, mob_tele_feat, done
   from LOAD_MOBILE_DATA lmd1
   where (mob_tele_feat is not null and mob_tele_feat_uid is null)
      or (mob_tele_feat is null and mob_tele_feat_uid is not null)
     and lmd.account_num = lmd1.account_num
     and lmd.mob_tele_feat = lmd.MOB_TELE_FEAT
     and lmd.MOB_TELE_FEAT_UID = lmd.MOB_TELE_FEAT_UID);

我想在LOAD_MOBILE_DATA中标记DONE column =P,其中mob_tele_feat为null但mob_tele_feat_uid不为null,或者mob_tele_feat_uid为null但mob_tele_feat不为null

EN

回答 3

Stack Overflow用户

发布于 2016-03-18 19:25:08

你做得太过了。如果此查询返回正确的记录:

代码语言:javascript
复制
select account_num, mob_tele_feat_uid, mob_tele_feat, done
from LOAD_MOBILE_DATA lmd1
where (mob_tele_feat is null and mob_tele_feat_uid is not null)
   or (mob_tele_feat is not null and mob_tele_feat_uid is null);

然后简单地改变这一点:

代码语言:javascript
复制
select account_num, mob_tele_feat_uid, mob_tele_feat, done
from LOAD_MOBILE_DATA lmd1

要这样做:

代码语言:javascript
复制
update load_mobile_data
set done = 'P'
票数 1
EN

Stack Overflow用户

发布于 2016-03-18 19:47:39

使用此CTE更新请根据您匹配的列修改联接条件

代码语言:javascript
复制
    WITH temptable AS
    (
        SELECT * FROM load_mobile_data WHERE 
        (mob_tele_feat is null and mob_tele_feat_uid is not null) 
        OR (mob_tele_feat is not null and mob_tele_feat_uid is null)
    )
    UPDATE a SET a.done='P' FROM load_mobile_data a JOIN temptable b 
    ON a.account_num=b.account_num
票数 0
EN

Stack Overflow用户

发布于 2016-03-19 06:30:56

最简单的方法是...只是更新你的查询。

代码语言:javascript
复制
UPDATE (
    select *
    from LOAD_MOBILE_DATA lmd1
    where (mob_tele_feat is null and mob_tele_feat_uid is not null)
       or (mob_tele_feat is not null and mob_tele_feat_uid is null)
)
SET done = 'P'

如果您真的想使用EXISTS运算符,则需要使用唯一标识表中每一行的主键列:

代码语言:javascript
复制
UPDATE  LOAD_MOBILE_DATA lmd1
SET done = 'P'
WHERE EXISTS (
        select *
        from LOAD_MOBILE_DATA lmd2
        where 
           lmd1.id = lmd2.id
           AND
           (
             (mob_tele_feat is null and mob_tele_feat_uid is not null)
             or (mob_tele_feat is not null and mob_tele_feat_uid is null)
           )
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36082967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档