我正在尝试使用以下逻辑更新表中的字段
·如果在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谓词子查询只能用作过滤器。我写的代码如下所示。我相信这将是一个简单的修复,但它让我发疯,任何帮助都将不胜感激
--
-- 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
发布于 2020-07-03 19:25:06
在this上查看带有连接的更新。否则,您可以使用merge语句,只使用更新部分,而不使用插入部分。这可能更容易编写。
它可能看起来像这样:
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子句中)
发布于 2020-07-03 19:28:20
我不认为databricks支持如此复杂的表达式。您可以使用两个更新:
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')
) ;
https://stackoverflow.com/questions/62713965
复制相似问题