首页 > 解决方案 > 仅当所有匹配条件都失败时才更新标志

问题描述

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

设想 :

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

在这种情况下,我使用的是不存在的,它不起作用。

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)

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

标签: sqloraclesubquerywhere-clauseoracle12c

解决方案


这应该像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来自,所以我使用???:你应该用正确的表别名替换它。


推荐阅读