首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Update使用带有exists/not exists的case语句

Update使用带有exists/not exists的case语句
EN

Stack Overflow用户
提问于 2020-07-03 18:55:46
回答 2查看 60关注 0票数 1

我正在尝试使用以下逻辑更新表中的字段

·如果在Partner_Priority where MCT.Partner =Part-ner_Part中找到记录·Part_ID where status =‘Include’且MCT.Status in (0, 0S ,0Z) set El-igible =‘Y’·如果在Partner_Priority where MCT.Partner =Part-ner_Part中找不到记录·Part_ID where status =‘Include’and MCT.Status =0SET population =‘Y’·Else set igible=‘N’

到目前为止,我已经尝试了各种代码组合,但总是以错误告终,IN/EXISTS谓词子查询只能用作过滤器。我写的代码如下所示。我相信这将是一个简单的修复,但它让我发疯,任何帮助都将不胜感激

代码语言:javascript
运行
复制
    --
    -- Update Eligible field
    --
    -- update mc
    update $env_tech_db.tbl_tech_mpxn_cohort  mc
    set eligible =  case when exists (select * from $env_tech_db.tbl_tech_mct mct
                               inner join $env_tech_db.tbl_tech_partner_priority pp
                               on mct.partner = pp.partner_id
                               where mc.mpxn = mct.mpxn and pp.status = 'Include' and mct.status     in ('0','0S','0Z')) then 'Y' 
                         when not exists(select * from $env_tech_db.tbl_tech_mct mct
                               inner join $env_tech_db.tbl_tech_partner_priority pp
                               on mct.partner = pp.partner_id
                               where mc.mpxn = mct.mpxn and pp.status = 'Include' and mct.status in ('0')) then 'Y'
                        else 'N'
                       end
     --from $env_tech_db.tbl_tech_mpxn_cohort mc 
EN

回答 2

Stack Overflow用户

发布于 2020-07-03 19:25:06

this上查看带有连接的更新。否则,您可以使用merge语句,只使用更新部分,而不使用插入部分。这可能更容易编写。

它可能看起来像这样:

代码语言:javascript
运行
复制
update mc
set eligible = case when pp.partner_id is not null then 'Y' when pp2.partner_id is null then 'N' end
from

$env_tech_db.tbl_tech_mpxn_cohort  mc
left join $env_tech_db.tbl_tech_mct mct 
on mc.mpxn = mct.mpxn 
left join $env_tech_db.tbl_tech_partner_priority pp
on mct.partner = pp.partner_id

left join $env_tech_db.tbl_tech_mct mct2 
on mc.mpxn = mct2.mpxn
left join $env_tech_db.tbl_tech_partner_priority pp2
on mct2.partner = pp2.partner_id

where pp.status = 'Include' and mct.status     in ('0','0S','0Z')) 
and pp2.status = 'Include' and mct2.status in ('0')

您遇到的问题是,您正在更新的表也在连接中使用。(在本例中,引用位于exists子查询的where子句中)

票数 0
EN

Stack Overflow用户

发布于 2020-07-03 19:28:20

我不认为databricks支持如此复杂的表达式。您可以使用两个更新:

代码语言:javascript
运行
复制
update $env_tech_db.tbl_tech_mpxn_cohort mc
    set eligible = 'N';

update $env_tech_db.tbl_tech_mpxn_cohort  mc
    set eligible = 'Y'
    where exists (select 1
                  from $env_tech_db.tbl_tech_mct mct join
                       $env_tech_db.tbl_tech_partner_priority pp
                       on mct.partner = pp.partner_id
                  where mc.mpxn = mct.mpxn and pp.status = 'Include' and
                        mct.status in ('0','0S','0Z')
                 ) or
          not exists (select 1
                      from $env_tech_db.tbl_tech_mct mct join
                           $env_tech_db.tbl_tech_partner_priority pp
                           on mct.partner = pp.partner_id
                      where mc.mpxn = mct.mpxn and pp.status = 'Include' and 
                            mct.status in ('0')
                      ) ;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62713965

复制
相关文章

相似问题

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