我尝试使用以下逻辑更新表中的字段
对于符合条件的人口,请进行以下计算:•如果在partner\u priority中找到记录,其中mct.partner=part-ner\u priority.partner\u id,其中status='include',mct.status in(0,0s,0z)set el igible='y'•如果在partner\u priority中找不到记录,其中mct.partner=part-ner\u priority.partner\u id,其中status='include'和mct.status=0s set qualified='y'•否则set qualified='n'
到目前为止,我已经尝试了各种代码组合,但总是以错误告终,in/exists predicate 子查询只能用作过滤器。我使用的代码如下。我相信这只是一个简单的修复,但它让我发疯,任何帮助将不胜感激
--
-- 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
2条答案
按热度按时间bvk5enib1#
看看这个,看看有没有一个连接的更新。否则,可以使用merge语句,只包含update部分,而不包含insert部分。那可能更容易写。
可能是这样的:
您遇到的问题是,要更新的表也用于联接中(或者在这种情况下,在exists子查询的where子句中引用)
wfypjpf42#
我不认为databricks支持如此复杂的表达式。您可以使用两个更新: