仅当所有匹配条件都失败时才更新标志

Posted

技术标签:

【中文标题】仅当所有匹配条件都失败时才更新标志【英文标题】:Update a flag only if ALL matching condition fails 【发布时间】:2020-11-17 13:40:15 【问题描述】:

我正在尝试在 oracle 中编写一个查询,以便仅根据以下情况更新一个标志:

场景:

一个 mctn_id 与多个 PRPR_ID 链接,每个 PRPR_ID 可以有不同的地址,如果 ALL PRPR_ID 地址不属于配置表地址,我需要将表中的标志更新为 N。如果其中任何一个属于配置表地址,则不应将标志更新为 N。

我正在使用 not exists 在这种情况下不起作用。

update prcb_enroll_tbl
set prov_flg ='N',
sys_insert_dtm = systimestamp
where tin_number in (select mctn_id
                        from cc_pr_prov prpr
                        inner join cc_pr_addr prad
                        on prpr.prpr_id = prad.prad_id
                        and not exists (select 1 
                                        from fsg_prcb_config config
                                        where prad.prad_addr1 = config.config_value)

即使只有一个地址属于配置表,上述查询正在更新一个标志,这不是预期的结果。

【问题讨论】:

【参考方案1】:

这应该像not exists。这符合你的要求吗?

update prcb_enroll_tbl pe
set prov_flg ='N', sys_insert_dtm = systimestamp
where not exists (
    select 1
    from cc_pr_prov pr
    inner join cc_pr_addr pa on pr.prpr_id = pz.prad_id
    inner join fsg_prcb_config pc on pc.config_value = pa.prad_addr1 
    where ??.mctn_id = pe.tin_number
)

不清楚mctn_id来自哪个表列,所以我使用了???:你应该用正确的表别名替换它。

【讨论】:

以上是关于仅当所有匹配条件都失败时才更新标志的主要内容,如果未能解决你的问题,请参考以下文章

仅当连接明确时才更新行

仅当数组中的所有元素都符合 MongoDb 中的条件时才获取文档

仅当记录匹配时才从另一个表中更新记录

仅当有数据时才呈现表

仅当与 table2 中的 column3 匹配时才更新 table1 中的 column1

仅当前面没有另一个字符串时才匹配字符串[重复]